gpt4 book ai didi

java.io.UnsupportedEncodingException : cp932?

转载 作者:搜寻专家 更新时间:2023-11-01 01:53:30 26 4
gpt4 key购买 nike

什么类型的内容会导致此异常?

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)

为什么 OpenJDK 不能处理这种编码?

最佳答案

任何使用该字符集/编码的文本或基于文本的内容!

根据 Wikipedia , CP932 是 Shift JIS 的扩展......它是用于表示日语文本的字符集之一。


根据 this page , CP932 在“扩展编码集(包含在 lib/charsets.jar 中)”中。如果它不在您安装的 OpenJDK 中,请查找 yum/apt/任何提供额外 Java 字符集支持的 OpenJDK 包。对 CP932 的支持在 OpenJDK 中绝对可以在某处获得......

也有可能(尽管 IMO 不太可能)OpenJDK 无法将“cp932”识别为它所指的“MS932”和“windows-31j”的别名。


我检查了the code .

问题是 Java(不仅仅是 OpenJDK!)根本无法识别“cp932”别名。它无法识别的原因是别名是非标准

此编码的官方(IANA 认可的)名称是“windows-31j”,Java 默认还支持以下别名:

  • “MS932”
  • “windows-932”
  • “csWindows31J”

如果您将“sun.nio.cs.map”系统属性(即使用“-D...”)设置为“Windows-31J/Shift_JIS”,那么 Java 也会识别“shift-jis”、“ms_kanji"、"x-sjis"和 "csShiftJIS"是等效的...但这应该只用于向后兼容未正确实现真正的 SHIFT-JIS 编码的旧(1.4.0 和更早版本)JDK . (此外,这并不能解决你的问题......)

那你能做什么?

  • 拒绝/丢弃无效的内容。 (确实如此。)
  • 找出此内容的来源,并让他们修复不正确的编码名称。
  • 在 Google 代码尝试使用编码名称之前拦截它,并将非标准名称替换为适当的标准名称。
  • 使用讨厌的反射黑客技术将编码别名添加到 Oracle 代码用于查找编码的私有(private)数据结构。 (警告:这可能会使您的应用程序变得脆弱,并导致可移植性问题。)
  • 针对 Java SE 提出 RFE,请求一种简单的方法来为字符编码添加别名。 (这是一个真正的长期解决方案,尽管您可以通过编写建议的增强功能并将其作为补丁提交给 OpenJDK 团队来加速它。)

关于java.io.UnsupportedEncodingException : cp932?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18245279/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com