【问题标题】:how to convert u'\uf04a' to unicode in python [duplicate]如何在 python 中将 u'\uf04a' 转换为 unicode [重复]
【发布时间】:2014-07-21 19:25:46
【问题描述】:

我正在尝试在 python 中解码 u'\uf04a',因此我可以在没有错误警告的情况下打印它。换句话说,我需要将愚蠢的 microsoft Windows 1252 字符转换为实际的 unicode

包含异常错误的html来源来自这里http://members.lovingfromadistance.com/showthread.php?12338-HAVING-SECOND-THOUGHTS

点击此处http://www.fileformat.info/info/unicode/char/f04a/index.htm了解有关 u'\uf04a' 和 u'\uf04c' 的信息

一个例子如下所示:

"Oh god please some advice ":

Out[408]: u'Oh God please some advice \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

Handling non-standard American English Characters and Symbols in a CSV, using Python

解决方案:

根据下面的cmets:我将这些字符集替换为问号('?')

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

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

【问题讨论】:

  • 不清楚您要做什么,或者 Windows 1252 的来源。您真正要打印的字符是什么?你从哪里得到数据?如果将该“字符串”视为字节序列,则它不是有效的 UTF-8...
  • 我同意。上面的帖子已经修改了。

标签: python unicode decode cp1252


【解决方案1】:

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

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

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

【讨论】:

    【解决方案2】:
    u'\uf04a'
    

    已经一个Unicode对象,这意味着没有什么可以解码。你唯一能做的就是encode它,如果你的目标是像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?'
    

    【讨论】:

    • 我需要将其转换为有意义的 unicode 而不是其当前形式。
    • 请定义您认为“有意义”的内容。如果您告诉我们您的实际问题是什么,也许它也会有所帮助,也就是说,您到底想做什么?您的数据来自哪里,您需要如何处理?
    • >>> print u'\uf04a'.encode("utf-8") 在我的 Win-7 系统上使用 Python 2 提供 ∩üè
    • @martineau - 如果你将 utf8 编码的二进制数据写入不支持 utf8 的终端,你最终会得到垃圾,所以你的命令没有任何意义。
    • @FrankWANG:这很简单(并且比您在问题中提出的解决方案更好(无论如何,解决方案不属于:))。查看我的编辑。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-17
    • 2010-10-12
    • 1970-01-01
    • 2018-08-29
    • 2017-08-03
    相关资源
    最近更新 更多