Unicode转换
我刚开始学习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 个回答
你需要知道testString这个字符串使用的是哪种字符编码。如果不是utf8格式,当你用decode('utf8')去解码的时候就会出错。
把这个加到你代码的第一行
# -*- coding: utf-8 -*-
然后在你的代码后面...
text = unicode(testString,"UTF-8")
当我使用
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)
的结果。