首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python3中基于unicode码点的汉字文件编写方法

Python3中基于unicode码点的汉字文件编写方法
EN

Stack Overflow用户
提问于 2020-09-27 00:15:33
回答 1查看 260关注 0票数 1

我试图根据Unicode.org/Public/ CSV /13.0.0/Unihan.zip中文本文件中的Unicode代码点将汉字写入CSV文件。例如,一个示例字符是U+9109。

在下面的示例中,我可以通过硬编码值来获得正确的输出(第8行),但是每次我尝试从代码点生成字节时都会出错(第14-16行)。

我正在基于Debian的Linux发行版上运行Python3.8.3版本。

最小工作(破损)示例:

代码语言:javascript
复制
  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()

执行和查看结果:

代码语言:javascript
复制
example $
example $./test.py 
example $
example $cat test.csv 
鄉,\u9109
example $

预期的输出将如下所示(逗号两边的汉字):

代码语言:javascript
复制
example $
example $./test.py 
example $cat test.csv 
鄉,鄉
example $
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-09-27 01:06:32

chr用于在Python3中将整数转换为代码点。

代码语言:javascript
复制
output.write(chr(0x9109).encode("utf-8"))

但是,如果在open中指定编码而不是使用二进制模式,则不必手动对所有内容进行编码。文件的print也为您处理换行符。

代码语言:javascript
复制
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)

输出:

代码语言:javascript
复制
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 丏
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64083656

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档