Python Can';不能在windows中处理字符串
我已经在linux中编写了一个python 2.7代码,它运行得很好 它使用Python Can';不能在windows中处理字符串,python,windows,python-2.7,Python,Windows,Python 2.7,我已经在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'
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。缺少字符是不可取的,但可以接受。Windows不喜欢UTF8。您可能会获得默认系统编码的文件夹名称,通常是win1252(ISO-8859-1的一个变体) 这就是为什么在文件名中找不到UTF8字符的原因。顺便说一下,异常表示您发现了一个字符code
0xa6
,在win1252编码中,该字符应该是|
它没有确切说明windows系统上的编码是什么,因为这可能取决于本地化,但它证明了数据不是UTF8编码的。这如何?您可以将其用于可选的
.replace()
在
string
模块中,有一组可以使用的字符
>>> import string
>>> string.digits+string.punctuation
'0123456789!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
>>>
导入字符串
>>>字符串.数字+字符串.标点符号
'0123456789!"#$%&\'()*+,-./:;?@[\\]^_`{|}~'
>>>
我不知道用什么替换什么。
os.listdir(os.getcwdu())
(注意“u”)将以unicode字符串的形式列出名称。感谢您解决了所有问题。任何面临相同问题的人,也看看“ftfy”库。将其与os.getcwdu()结合起来,一切都完成了!