如何将文件中的Unicode码点字符串转换为UTF-8字符(Python3)
解决HTML实体转义字符串转UTF-8字符的问题
Python内置的html模块提供了完美的解决方案,无需自行解析字符串,支持所有基本平面Unicode码点,还能处理格式错误的实体。
核心方法:html.unescape()
这个函数可以自动识别并转换所有标准HTML实体(包括命名实体如",以及&#xxxx;/&#xhhhh;形式的Unicode实体)为对应的UTF-8字符;对于无效的格式错误实体,会直接保留原内容,不会抛出异常。
代码示例
以下是读取输入文件、处理每一行并写入UTF-8输出文件的完整代码:
import html # 读取ASCII格式的输入文件,写入UTF-8格式的输出文件 with open('input.txt', 'r', encoding='ascii') as in_file, open('output.txt', 'w', encoding='utf-8') as out_file: for line_num, line in enumerate(in_file, 1): # 处理转义 decoded_line = html.unescape(line) out_file.write(decoded_line) # 可选:如果需要处理极端错误情况(如编码错误),可以加异常捕获 # try: # decoded_line = html.unescape(line) # out_file.write(decoded_line) # except UnicodeDecodeError as e: # print(f"第{line_num}行编码错误,保留原行: {e}") # out_file.write(line)
说明
- 编码设置:输入文件用
ascii编码读取,确保正确读取所有ASCII格式的实体字符串;输出文件用utf-8编码写入,保证转换后的Unicode字符正确保存。 - 错误处理:
html.unescape()本身对无效实体(如&invalid;)会直接保留,无需额外处理;如果遇到文件编码错误,可以添加try-except块捕获并处理,避免程序中断。 - 直接读写无效的原因:文件中的内容是转义后的实体字符串,Python读取后会将其视为普通文本,不会自动解析实体;而你在解释器直接输入时,若输入的是未转义的Unicode字符或Python原生转义序列,解释器会自动解析,但文件中的HTML实体需要专门的解码工具处理。
内容的提问来源于stack exchange,提问作者Mike Maxwell
相关产品推荐
相关产品推荐

