如何在Python中将u'\uf04a'转换为unicode
我正在尝试在Python中解码u'\uf04a',这样我就可以正常打印它而不会出现错误警告。换句话说,我需要把那些奇怪的微软Windows 1252字符转换成真正的unicode。
包含这些奇怪错误的HTML来源于这里 http://members.lovingfromadistance.com/showthread.php?12338-HAVING-SECOND-THOUGHTS
想了解u'\uf04a'和u'\uf04c',可以点击这里 http://www.fileformat.info/info/unicode/char/f04a/index.htm
一个例子看起来是这样的:
"Oh god please some advice ":
输出[408]: u'哦,天哪,请给点建议 \uf04c'
给定一个这样的讨论帖作为测试例子:
thread = u'who are you \uf04a Why you are so harsh to her \uf04c'
thread.decode('utf8')
print u'\uf04a'
print u'\uf04a'.decode('utf8') # error!!!
'charmap' 编码无法在位置1526编码字符u'\uf04a':字符映射到未定义
在两个Python脚本的帮助下,我成功地转换了u'\x92',但仍然对u'\uf04a'感到困惑。有什么建议吗?
参考资料
https://github.com/AnthonyBRoberts/NNS/blob/master/tools/killgremlins.py
解决方案:
根据下面的评论:我把这些字符替换成问号('?')
thread = u'who are you \uf04a Why you are so harsh to her \uf04c'
thread = thread.replace(u'\uf04a', '?')
thread = thread.replace(u'\uf04c', '?')
希望这对其他初学者有帮助。
2 个回答
这个表示法 u'\uf04a'
指的是一个叫做 U+F04A 的 Unicode 代码点。简单来说,这个代码点是一个“私用”代码点,意思是 Unicode 标准并没有给它分配任何字符,也不会给它分配字符;它可以根据私人协议来使用。
所以,谈论如何打印这个代码点是没有意义的。如果有某种私人协议规定在某个特定的情况下使用它,那么你需要用一个包含这个代码点对应字符的字体来打印。不同的协议和字体可能会把同一个代码点分配给完全不同的字符和图形。
另外,U+F04A 可能是因为之前处理字符数据时出现了错误(比如转换错误)而产生的。
u'\uf04a'
这个已经是一个Unicode对象了,也就是说没有什么需要解码的。你能做的唯一事情就是对它进行编码,如果你想用特定的文件编码,比如UTF-8(这和Unicode不是同一个东西,但人们常常把它们搞混)。
u'\uf04a'.encode("utf-8")
这会给你一个字符串(在Python 2中)或者一个bytes
对象(在Python 3中),你可以把它写入文件或者UTF-8终端等等。
你不能把它编码成普通的Windows字符串,因为cp1252编码里没有那个字符。
你能做的就是把它转换成一个没有那些不支持字符的编码,方法是告诉编码器用?
来替代缺失的字符:
>>> u'who\uf04a why\uf04c'.encode("ascii", errors="replace")
'who? why?'