我在linux上编写了一个python 2.7代码,它工作正常。
使用
os.listdir(os.getcwd())
将文件夹名称作为变量读取,稍后在某些部分使用它们。
在linux中,我使用简单的转换技巧手动将非asci字符转换为asci字符。
str(str(tfile)[0:-4]).replace('\xc4\xb0', 'I').replace("\xc4\x9e", 'G').replace("\xc3\x9c", 'U').replace("\xc3\x87", 'C').replace("\xc3\x96", 'O').replace("\xc5\x9e", 'S') ,str(line.split(";")[0]).replace(" ", "").rjust(13, "0"),a))
这种方法在Windows中失败了。我试过了
udata = str(str(str(tfile)[0:-4])).decode("UTF-8")
asci = udata.encode("ascii","ignore")
以下
也失败了DEM¦-RTEPE # at this string error occured
Exception in Tkinter callback
Traceback (most recent call last):
File "C:\Python27\lib\lib-tk\Tkinter.py", line 1532, in __call__
return self.func(*args)
File "C:\Users\benhur.satir\workspace\Soykan\tkinter.py", line 178, in SparisDerle
udata = str(str(str(tfile)[0:-4])).decode("utf=8")
File "C:\Python27\lib\encodings\utf_8.py", line 16, in decode
return codecs.utf_8_decode(input, errors, True)
UnicodeDecodeError: 'utf8' codec can't decode byte 0xa6 in position 3: invalid start byte
如何在Windows中处理这些字符?
注意:将它们保留为UTF会导致xlswriter模块失败,因此我需要将它们转换为asci。缺少字符是不可取的。
答案 0 :(得分:0)
Windows不喜欢UTF8。您可能会使用默认系统编码获取文件夹名称,通常是win1252(ISO-8859-1的变体)。
这就是为什么你在文件名中找不到UTF8字符的原因。顺便说一下,例外情况说你发现了一个代码0xa6
的字符,在win1252编码中会是|
。
它并没有准确说明Windows系统上的编码是什么,因为它可能取决于本地化,但它证明数据不是UTF8编码的。
答案 1 :(得分:0)
这个怎么样?
您可以将此选项用于可选.replace()
在string
的模块中,有一组可以使用的字符..
>>> import string
>>> string.digits+string.punctuation
'0123456789!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
>>>