python encoding problem in docker
总结下之前写项目时遇到的一个关于编码的问题吧~~
背景有个需求实现如下,安卓将一系列文件打zip包上传到服务器,服务器这边是部署在docker中的python服务,服务器需要将zip包解压,并处理。但是Python服务器这边却时不时报了以下的错
UnicodeEncodeError: ‘ascii’ codec can’t encode characters in position
问题情景先是在安卓工程上的代码问题String.format 方法,在不传入Locale的情况下,会使用系统默认的Locale。平时使用不用好像没什么问题,也不会崩溃报错等等。但是在格式化数字使用%d的时候,会遇到其他语言的数字,可以尝试将安卓手机调成阿拉伯语,输出就会是下面左侧的数字了。
٠ 0 ١ 1 ٢ 2 ٣ 3 ٤ 4 ٥ 5 ٦ 6 ٧ 7 ٨ 8 ٩ 9
不过即使这样,该如何就如何
但是用这样的字符命名的文件,压缩到zip包发送到服务器,就出现问题了
zip包中包含了名字带阿拉伯编码的数字的文件
然后就是docker中python的代码问题上述安卓打包的带阿拉伯编码的数字的zip,发过来服务器 ...
Native Library already loaded in another classloader
问题如果tomcat上的两个web应用需要使用相同的JNI本地动态库,当第二个web应用加载JNI本地动态库时,就会出现Native Library already loaded in another classloader错误
原因不同webapp中的类是使用不同的classloader加载的
System.loadLibrary方法中不允许不同的classloader去加载同一个JNI本地动态库
解决办法将加载JNI本地库的类抽离,单独打包一个jar文件
将该jar文件放到tomcat目录下的lib目录下
同时删除原来项目中的加载JNI本地库的类,以防类冲突