我试图根据Unicode.org/Public/ CSV /13.0.0/Unihan.zip中文本文件中的Unicode代码点将汉字写入CSV文件。例如,一个示例字符是U+9109。
在下面的示例中,我可以通过硬编码值来获得正确的输出(第8行),但是每次我尝试从代码点生成字节时都会出错(第14-16行)。
我正在基于Debian的Linux发行版上运行Python3.8.3版本。
最小工作(破损)示例:
1 #!/usr/bin/env python3
2
3 def main():
4
5 output = open("test.csv", "wb")
6
7 # Hardcoded values work just fine
8 output.write('\u9109'.encode("utf-8"))
9
10 # Comma separation
11 output.write(','.encode("utf-8"))
12
13 # Problem is here
14 codepoint = '9109'
15 u_str = '\\' + 'u' + codepoint
16 output.write(u_str.encode("utf-8"))
17
18 # End with newline
19 output.write('\n'.encode("utf-8"))
20
21 output.close()
22
23 if __name__ == "__main__":
24 main()执行和查看结果:
example $
example $./test.py
example $
example $cat test.csv
鄉,\u9109
example $预期的输出将如下所示(逗号两边的汉字):
example $
example $./test.py
example $cat test.csv
鄉,鄉
example $发布于 2020-09-27 01:06:32
chr用于在Python3中将整数转换为代码点。
output.write(chr(0x9109).encode("utf-8"))但是,如果在open中指定编码而不是使用二进制模式,则不必手动对所有内容进行编码。文件的print也为您处理换行符。
with open("test.txt",'w',encoding='utf-8') as output:
for i in range(0x4e00,0x4e10):
print(f'U+{i:04X} {chr(i)}',file=output)输出:
U+4E00 一
U+4E01 丁
U+4E02 丂
U+4E03 七
U+4E04 丄
U+4E05 丅
U+4E06 丆
U+4E07 万
U+4E08 丈
U+4E09 三
U+4E0A 上
U+4E0B 下
U+4E0C 丌
U+4E0D 不
U+4E0E 与
U+4E0F 丏https://stackoverflow.com/questions/64083656
复制相似问题