文字亂碼,結果是十六進製制數字,編碼,解碼問題

2021-09-26 03:05:34 字數 1319 閱讀 9941

我在文字聚類時,將選好的文字詞寫入到txt文字時發生了亂碼的問題。具體下面這種情況:

就是將本本字元寫到txt文字,txt文字是預設的ansi,查了很多資料都說是編碼格式的問題。

問題說明:文中的是十六進製制,而且是bytes型別。

字串的型別只有兩種(str,bytes)。編碼的方式有utf-8,gbk等等。利用encode(編碼方式)將str型字串變成bytes型字串。decode(編碼方式)就反過來。

下面看我的**:

result = open(docpath,'a',encoding = 'utf-8')

for j in range(len(word)):

#print(type(word[j]))

result.write(str(word[j].encode('utf-8') + b' '))

result.write('\r\n')

其中word[j]的內容是這樣的      '一周', '一場', '一堆', '一種', '一秒', '一路', '萬事開頭難', '三元組',     典型的文字字串。(word[j].encode('utf-8') + b' ')就是bytes型字元,沒有轉成str型,導致寫入進去的時候就變成上圖的結果(我也不知道為啥沒轉成)

然後我就改了迴圈裡的**

for ci in (word):

result.write(ci + ' ')

result.write('\r\n')

結果txt檔案中沒有十六進製制了,但是出現亂碼的文字

想到txt檔案預設的編碼是ansi模式,但是我open時的寫檔案方式是「utf-8」,顯然解碼與編碼方式衝突,所以我就把encoding的方式去掉,讓他預設

result = open(docpath, 'a')

for ci in (word):

result.write(ci + ' ')

result.write('\r\n')

文字結果如下,問題就解決了:

總結哈,分析原理,根據原理找自己**裡的問題,真的得一步一步試試。

十六進製制與數字

原始碼 檔名 digit1.php error reporting 0 if empty get password function noother says correct temp one ord 1 nine ord 9 number 3735929054 check all the inpu...

十六進製制計數和編址

十六進製制是二進位制值的一種便利表示方式。以16為基數的計數系統使用數字0到9和字母a到f。一 理解位元組 8位 1個位元組 是一種常用的二進位製組,從00000000到11111111的二進位制數可表示為從00到ff的十六進製制數。前導零始終都會顯示,以完整的8位表示。例如,二進位制值數00001...

CString轉十六進製制數字

借用strtol函式可以直接將乙個cstring物件轉化為任意數制的整數。比如 cstring st 20 int n strtol st,null,16 strtol函式原型 long int strtol const char nptr,char endptr,int base 引數base範圍...