Python无法翻译

时间:2017-05-22 09:13:12

标签: python string encoding

我想用其他字符替换所有出现的字符,我写了如下的翻译:

from string import punctuation, maketrans, digits
lower = maketrans("ĞÜŞİÖÇ".encode('utf-8'), "ğüşiöç".encode('utf-8'))

- - 编码:UTF-8 - - '在我的代码的开头。 当我尝试编码或解码时,我得到了UnicodeDecodeError'当我不进行任何编码时,我会收到类似

的错误
ValueError: maketrans arguments must have same length

当Python得到这些时,我猜他们会分配不同大小的字节,序列长度也不相同。 我使用的是Python 2.7。

全部谢谢:)

1 个答案:

答案 0 :(得分:0)

{3}}方法(Python 3中的maketrans)对bytes.maketrans个对象进行操作,因此需要对字符串进行编码。

但是,在unicode中,字符没有固定长度,可以在2到4个字节之间变化。以下是两个字符串,一旦编码:

bytes

这解释了你得到的>>> "ĞÜŞİÖÇ".encode('utf-8') b'\xc4\x9e\xc3\x9c\xc5\x9e\xc4\xb0\xc3\x96\xc3\x87' >>> "ğüşiöç".encode('utf-8') b'\xc4\x9f\xc3\xbc\xc5\x9fi\xc3\xb6\xc3\xa7'

我认为调用的正确函数是ValueError而不是bytes.maketrans。此函数直接对字符串进行操作,不需要(也不应该)编码:

str.maketrans

但是,这两个字符串使用unicode字符,因此您的文件需要在>>> str.maketrans("ĞÜŞİÖÇ", "ğüşiöç") {286: 287, 220: 252, 350: 351, 304: 105, 214: 246, 199: 231} 中进行编码。因此,请将utf-8保留在文件的开头。