"surrogateescape"无法逃避某些角色

 yu诚_530 发布于 2023-02-02 21:42

关于在Python中读写文本文件,其中一个主要的Python贡献者提到了有关surrogateescapeUnicode错误处理程序的问题:

[surrogateescape]通过在Unicode代码点空间的一个小部分使用的数据中处理数据来处理解码错误.编码时,它会将那些隐藏的值转换回无法正确解码的确切原始字节序列.

但是,在打开文件然后尝试将输出写入另一个文件时:

input_file = open('someFile.txt', 'r', encoding="ascii", errors="surrogateescape")
output_file = open('anotherFile.txt', 'w')

for line in input_file:
    output_file.write(line)

结果是:

  File "./break-50000.py", line 37, in main
    output_file.write(line)
UnicodeEncodeError: 'utf-8' codec can't encode character '\udcc3' in position 3: surrogates not allowed

请注意,输入文件不是 ASCII.但是,它会在包含非ASCII字符的数百行之前横切它,然后才会在一个特定行上抛出异常.输出文件必须是ASCII并且丢失一些字符就好了.

这是在解码为UTF-8时抛出错误的行:

'Zoë的咖啡馆'

这是十六进制编码:

$ cat z.txt | hd
00000000  27 5a 6f c3 ab 5c 27 73  20 43 6f 66 66 65 65 20  |'Zo..\'s Coffee |
00000010  48 6f 75 73 65 27 0a                              |House'.|
00000017

为什么surrogateescapeUnicode Error Handler会返回 ASCII字符?这是在Kubuntu Linux 12.10上的Python 3.2.3.

1 个回答
  • 为什么surrogateescape Unicode Error Handler会返回不是ASCII的字符?

    因为这就是明确的做法.这样你可以用另一种方式使用相同的错误处理程序,它将知道该怎么做.

    3>> b"'Zo\xc3\xab\\'s'".decode('ascii', errors='surrogateescape')
    "'Zo\udcc3\udcab\\'s'"
    3>> "'Zo\udcc3\udcab\\'s'".encode('ascii', errors='surrogateescape')
    b"'Zo\xc3\xab\\'s'"
    

    2023-02-02 21:47 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有