无法处理Windows中的字符串

时间:2015-01-20 16:24:12

标签: 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').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。缺少字符是不可取的。

2 个答案:

答案 0 :(得分:0)

Windows不喜欢UTF8。您可能会使用默认系统编码获取文件夹名称,通常是win1252(ISO-8859-1的变体)。

这就是为什么你在文件名中找不到UTF8字符的原因。顺便说一下,例外情况说你发现了一个代码0xa6的字符,在win1252编码中会是|

它并没有准确说明Windows系统上的编码是什么,因为它可能取决于本地化,但它证明数据不是UTF8编码的。

答案 1 :(得分:0)

这个怎么样?
您可以将此选项用于可选.replace()
string的模块中,有一组可以使用的字符..

>>> import string
>>> string.digits+string.punctuation
'0123456789!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
>>>