我想用其他字符替换所有出现的字符,我写了如下的翻译:
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。
全部谢谢:)
答案 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
保留在文件的开头。