UnicodeEncodeError和surrogates not allowed

简介: UnicodeEncodeError和surrogates not allowed

当执行类似os.listdir() 这样的函数时,这些不合规范的文件名就会让Python陷入困境。 一方面,它不能仅仅只是丢弃这些不合格的名字。而另一方面,它又不能将这些文件名转换为正确的文本字符串。 Python对这个问题的解决方案是从文件名中获取未解码的字节值比如 \xhh 并将它映射成Unicode字符 \udchh 表示的所谓的”代理编码”。

如:字符 \udce4 是一个非法的Unicode字符。 它其实是一个被称为代理字符对的双字符组合的后半部分。 由于缺少了前半部分,因此它是个非法的Unicode。 所以,唯一能成功输出的方法就是当遇到不合法文件名时采取相应的补救措施。

surrogateescape:

这种是Python在绝大部分面向OS的API中所使用的错误处理器,

它能以一种优雅的方式处理由操作系统提供的数据的编码问题。

在解码出错时会将出错字节存储到一个很少被使用到的Unicode编码范围内。

在编码时将那些隐藏值又还原回原先解码失败的字节序列。

它不仅对于OS API非常有用,也能很容易的处理其他情况下的编码错误。


相关文章
|
5月前
|
XML Java Maven
Invalid bound statement (not found)
Invalid bound statement (not found)
39 0
|
SQL Java 数据库连接
Invalid bound statement (not found) 问题处理
您好,我是码农飞哥,感谢您阅读本文!本文将介绍使用MyBatis时出现的一些常见问题。
289 0
libvpx enabled but no supported decoders found
libvpx enabled but no supported decoders found
204 0
|
数据安全/隐私保护
remote: Support for password authentication was removed on August 13, 2021
remote: Support for password authentication was removed on August 13, 2021
329 0
|
应用服务中间件
No modifications are allowed to a locked ParameterMap
错误:java.lang.IllegalStateException: No modifications are allowed to a locked ParameterMap at org.apache.catalina.util.ParameterMap.remove(ParameterMap.java:205) 1.Servlet中使用了这个方法:request.getParameterMap(),将它的返回值赋值给一个空的hashmap对象结果报错。
8042 0
|
SQL 监控 数据库
ORA-32004: obsolete and/or deprecated parameter(s) specified
如果在启动数据库时遇到ORA-32004: obsolete and/or deprecated parameter(s) specified 错误,这个是因为数据库里面设置了过时或不推荐使用的参数,如下描述所示: SQL> ho oerr ora 3200432004, 00000, "obsol...
1269 0
Error saving your changes: Description control characters are not allowed
在修改 GitHub 上的仓库描述时出现此提示信息:Error saving your changes: Description control characters are not allowed 开始以为是 Fork 来的没有修改权限,但之前没有遇到这样的情况,提示信息说的也不是这个意思。
2392 0