【问题标题】:Can't handle strings in windows无法在 Windows 中处理字符串
【发布时间】:2015-01-20 16:24:12
【问题描述】:

我在 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。缺少字符是不可取的,但也可以接受。

【问题讨论】:

  • os.listdir(os.getcwdu())(注意“u”)会将名称列为 unicode 字符串。
  • 谢谢这一切都解决了。任何面临同样情况的人,也请看一下“ftfy”库。将它与 os.getcwdu() 结合起来就完成了!

标签: python windows python-2.7


【解决方案1】:

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

这就是您在文件名中找不到 UTF8 字符的原因。顺便说一下,异常说你找到了代码0xa6的字符,在win1252编码中是|

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

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

    • 我不知道用什么替换什么。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-04-17
    • 1970-01-01
    • 2015-09-25
    • 2017-06-06
    • 2020-02-13
    • 2016-06-24
    • 2020-07-31
    相关资源
    最近更新 更多