Python:如何将ASCII编码的十六进制字符串转为UTF-8希腊字符
解决Python中转义序列转希腊字母Η的问题
嘿,这个问题我之前处理过,其实核心得先搞清楚你的变量a到底是什么类型——是字节对象还是带转义字符的字符串,两种情况的处理方式略有不同:
情况1:变量a是字节对象(直接用二进制模式读取文件)
如果你是用open('file.txt', 'rb')读取的文件,那得到的a应该是类似b'\xce\x97'的字节对象。这种情况最简单,直接用UTF-8解码就行:
# 假设a是读取到的字节对象 a = b'\xce\x97' greek_char = a.decode('utf-8') print(greek_char) # 输出:Η
情况2:变量a是带转义序列的字符串(用文本模式读取文件)
如果是用open('file.txt', 'r', encoding='ascii')读取的,那a会是类似"\xce\x97"或者r"\xce\x97"的字符串(每个\x都是单独的ASCII字符)。这时候需要先把转义序列转换成字节,再解码:
方法1:提取十六进制字符转换
先去掉字符串里的\x前缀,把剩下的十六进制字符拼接起来,再用bytes.fromhex()转换成字节:
a = r"\xce\x97" # 移除所有的\x转义前缀 hex_content = a.replace(r'\x', '') # 转成字节并解码 greek_char = bytes.fromhex(hex_content).decode('utf-8') print(greek_char) # 输出:Η
方法2:用ast模块解析字面量
如果你不想手动处理字符串,也可以用ast.literal_eval把字符串解析成字节对象,再解码:
import ast a = r"\xce\x97" # 把字符串包装成Python字节字面量的格式 byte_str = f"b'{a}'" # 解析成字节对象 byte_data = ast.literal_eval(byte_str) # 解码成UTF-8字符串 greek_char = byte_data.decode('utf-8') print(greek_char) # 输出:Η
两种方法都能得到你想要的希腊大写字母Η,你可以根据自己读取文件的方式选对应的方案~
内容的提问来源于stack exchange,提问作者Κωνσταντίνος Κωστάκης
相关产品推荐
相关产品推荐

