Saq*_*Ali 4 java openjdk encoding character-encoding mime-types
什么类型的内容会导致此异常?
Caused by: java.io.UnsupportedEncodingException: cp932
at sun.nio.cs.StreamDecoder.forInputStreamReader(StreamDecoder.java:71)
at java.io.InputStreamReader.<init>(InputStreamReader.java:100)
at com.google.code.com.sun.mail.handlers.text_plain.getContent(text_plain.java:109)
at com.google.code.javax.activation.DataSourceDataContentHandler.getContent(DataHandler.java:803)
at com.google.code.javax.activation.DataHandler.getContent(DataHandler.java:550)
at com.google.code.javax.mail.internet.MimeBodyPart.getContent(MimeBodyPart.java:639)
Run Code Online (Sandbox Code Playgroud)
为什么OpenJDK不能处理这种编码?
任何使用该字符集/编码的文本或基于文本的内容!
根据维基百科,CP932是Shift JIS的扩展,它是用于表示日文文本的字符集之一.
根据此页面,CP932位于"扩展编码集(包含在lib/charsets.jar中)"中.如果它不在您的OpenJDK安装中,请查找yum/apt /任何提供额外Java字符集支持的OpenJDK包.在OpenJDK中支持CP932 绝对可以在某处使用......
也有可能(尽管IMO不太可能)OpenJDK不会将"cp932"识别为它所称为"MS932"和"windows-31j"的别名.
我查了一下代码.
问题是Java(不仅仅是OpenJDK!)根本不识别"cp932"别名.它不承认它的原因是别名是非标准的.
此编码的官方(IANA认可)名称为"windows-31j",默认情况下Java还支持以下别名:
如果将"sun.nio.cs.map"系统属性(即使用"-D ...")设置为"Windows-31J/Shift_JIS",则Java也会识别"shift-jis","ms_kanji", "x-sjis"和"csShiftJIS"是等效的...但是这只应该用于向后兼容那些没有正确实现真正的SHIFT-JIS编码的旧(1.4.0和更早版本)JDK.(此外,这不能解决您的问题...)
所以,你可以做什么?
| 归档时间: |
|
| 查看次数: |
3980 次 |
| 最近记录: |