-2

我正在尝试在 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 ":

Out[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

使用 Python 处理 CSV 中的非标准美式英语字符和符号

解决方案:

根据下面的评论:我用问号('?')替换这些字符集

thread = u'who are you \uf04a Why you are so harsh to her \uf04c'
thread = thread.replace(u'\uf04a', '?')
thread = thread.replace(u'\uf04c', '?')

希望这对其他初学者有所帮助。

4

2 回答 2

5

该符号u'\uf04a'表示 Unicode 代码点 U+F04A,根据定义,它是私​​有使用代码点。这意味着 Unicode 标准不会为它分配任何字符,而且永远不会;相反,它可以被私人协议使用。

因此,谈论打印它是没有意义的。如果有在某些上下文中使用它的私人协议,那么您使用具有分配给该代码点的字形的字体打印它。不同的协议和不同的字体可能会将完全不同的字符和字形分配给同一个代码点。

U+F04A 可能是在某个早期阶段对字符数据进行错误处理(例如,错误转换)的结果。

于 2014-06-01T17:09:16.037 回答
4
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?'
于 2014-06-01T15:57:39.087 回答