【发布时间】:2013-02-05 13:29:16
【问题描述】:
早些时候,我问过这个问题: How to convert some character into five digit unicode one in Python 3.3?
但是今天我发现大写 U 代码点在打印时有效,但是当我在文件中尝试时,结果却失败了。为什么?
import re
f = codecs.open('test.txt', 'r', encoding="utf-8")
g = codecs.open('test_output.txt', 'w', encoding="utf-8")
fin = f.read()
output = re.sub('m', '\U000243D0', fin)
g.write(output)
【问题讨论】:
-
失败如何准确?您的代码在这里没有任何问题,您得到的输出与您预期的输出是什么?
-
@dan04:
codecs用法指向 Python 2;在 Python 3 中,您只需使用open(),通常。 -
我使用的是 Python 3.3。奇怪的是,m 被 ए 取代了。它的代码点是 \u090F。
-
@user1610952:你用什么来测试数据?
\u090F编码为 UTF-8 为\xE0\xA4\x8F(三个字节以\xE0开头),\U000243D0编码为\xF0\xA4\x8F\x90;如果您从第一个字节中删除 1 位并忽略\x90字节,则会出现重叠。 Python 不这样做(我测试过),那么您使用什么工具会损坏数据或曲解数据?