Unicode转换

0 投票
3 回答
904 浏览
提问于 2025-04-16 15:57

我刚开始学习Python。

我有一段用泰米尔语写的Unicode文本。

当我使用sys.getdefaultencoding()这个命令时,得到的结果是"Cp1252"。

我想要的是,当我用text = testString.decode("utf-8")时,不想出现错误,但我遇到了一个错误:“UnicodeEncodeError: 'charmap' codec can't encode characters in position 0-8: character maps to undefined”。

3 个回答

0

你需要知道testString这个字符串使用的是哪种字符编码。如果不是utf8格式,当你用decode('utf8')去解码的时候就会出错。

0

把这个加到你代码的第一行

# -*- coding: utf-8 -*- 

然后在你的代码后面...

text = unicode(testString,"UTF-8")

3

当我使用 sys.getdefaultencoding() 时,输出结果是 "Cp1252"

对此有两个评论:(1)正确写法是 "cp1252",而不是 "Cp1252"。别凭记忆来打字。(2)让 sys.getdefaultencoding() 返回 "cp1252" 的人,应该礼貌地告诉他,这样做不是个好主意。

至于其他的,我来猜猜。你有一个 unicode 对象,里面包含一些泰米尔语的文本。你错误地尝试去解码它。解码的意思是把一个 str 对象转换成 unicode 对象。不幸的是,你没有 str 对象,更糟糕的是,你碰到了 Python 2 中为数不多的奇怪问题之一:它试图通过使用系统默认编码来把你的 unicode 字符串编码成一个 str 对象。如果默认编码是 'ascii' 或 'cp1252',编码就会失败。这就是为什么你会得到一个 Unicode*En*codeError,而不是 Unicode*De*codeError。

简单来说:如果你真的想这么做,就用 text = testString.encode("utf-8")。否则,请解释一下你想做什么,并给我们看看 print repr(testString) 的结果。

撰写回答