当前我的代码如下:
import unicodedata
unicode = open("unicode.txt").read()
unicode = unicodedata.normalize('NFKC', unicode)
print(unicode)
其中unicode.txt
是仅读取\u00e9
的文本文件。
运行程序时,输出仍为\u00e9
,但是,如果我将.normalize行中的unicode
替换为\u00e9
,则输出为é
。 / p>
最终目标只是将所有unicode字符串(例如\ u00e9)替换为其常规字符。像cafe
而不是café
。
将字符串输入到函数中时,normalize函数似乎可以正常工作,但是在要打开的文件中时则无法正常工作。即使那样,它仍返回风格化的é
而不是常规的e
。
有什么办法可以使这项工作成功吗?
答案 0 :(得分:1)
文件的内容实际上是六个字符:\u0029
。键入代码的'\u0029'
是表示为转义代码的单个Unicode代码点:
>>> print('\u00e9') # A single character escape code
é
>>> print(r'\u0039') # A six-character string using raw string notation.
\u0039 # Escape codes are ignored and characters are literal.
>>> print('\\u0039') # A six-character string using an escaped backslash
\u0039 # to indicate a literal backslash.
要将六个字符的字符串转换为字符,请使用以下命令
>>> r'\u00e9'.encode('ascii').decode('unicode-escape')
'é'
需要ascii
编码将ASCII字符的Unicode字符串转换为字节字符串,因为您只能在Python 3中解码字节字符串。Python2可以跳过它,因为如果隐式将Unicode字符串编码回ASCII,需要。
您还可以使用以下命令直接从文件中读取该文件(假设使用Python 3):
with open('unicode.txt',encoding='unicode-escape') as f:
data = f.read()
在Python 2上使用import io
和io.open
。
答案 1 :(得分:0)
我想您可以将其更改为 readline() 或 readlines()。 代码将是:
import unicodedata
unicode = open("unicode.txt", 'r')
for ln in unicode.readlines():
ln = unicodedata.normalize('NFKC', ln)
print(ln)
原因是因为 read() 会分别处理文件中的每个字符,这意味着每个字符都会发生迭代。同时, readline 或 readlines() 将处理一行或整行的迭代。
但是,unicodedata 尝试将字符串中的 unicode 规范化,而不是按照字符进行规范化。希望会有所帮助。
参考资料: https://www.tutorialspoint.com/what-are-the-differences-between-readline-and-readlines-in-selenium-with-python https://discuss.codecademy.com/t/what-is-difference-between-read-and-readlines-in-python/478934