【问题标题】:java.io.UnsupportedEncodingException for UCS-2UCS-2 的 java.io.UnsupportedEncodingException
【发布时间】:2014-04-16 05:39:21
【问题描述】:

我有一些匈牙利语文本,我希望使用 UCS2 编码对其进行编码

String stringEncoding = "UCS-2";
String contentHardCoded = new String("szigorúan bejelentkezési azonosításhoz".getBytes(),stringEncoding);

但我得到以下异常

Exception in thread "main" java.io.UnsupportedEncodingException: UCS-2
    at java.lang.StringCoding.decode(StringCoding.java:170)
    at java.lang.String.<init>(String.java:443)
    at java.lang.String.<init>(String.java:515)
    at com.gtl.mindmatics.sms.Main.sendSMS(Main.java:108)
    at com.gtl.mindmatics.sms.Main.main(Main.java:180)
Java Result: 1

可能出了什么问题?

编辑

我使用以下命令来运行我的 jar 其实我的命令是这样的

java -Dfile.encoding=UCS-2 -cp MyApp.jar com.sms.Main "9876543210" “UCS-2” &gt; testApp.log

还有应该使用什么正确的编码,我使用了 UTF-8 但输出不正确。

【问题讨论】:

  • Oracle 的 Java 8 实现支持的编码的规范名称在 here 中列出。顺便说一句,getBytes() 必须使用相同的编码,否则操作不对称,字符串将被破坏。

标签: java exception ucs2


【解决方案1】:

你做错了; String 是一组字符,仅此而已。你在这里做的是:

  • 您将获得由当前 JVM 编码解码的字符串字节,
  • 您使用不同的编码重新编码这些字节。

因此,您的字符串将完全损坏。 String 没有编码

更多详情请见here


至于 UCS-2,它已被 UTF-16 取代。您想改用 UTF-16。

请注意,您必须指定字节顺序,这对 UTF-16 很重要,与 UTF-8 不同。使用:

StandardCharsets.UTF_16LE

(或 BE 表示大端),或者,如果您仍在使用 Java 6 或更低版本:

Charset.forName("UTF-16LE") // or BE

【讨论】:

  • 对不起,我忘了提,我的命令是这样的: java -Dfile.encoding=UCS-2 -cp MyApp.jar com.sms.Main "9876543210" "UCS-2" > testApp.日志,所以我想我正在重置当前的 JVM 编码。
  • 谨防在未指定字节顺序的情况下使用 UTF-16!如果没有定义字节序,则默认为大字节序。
猜你喜欢
  • 2013-11-15
  • 2012-02-18
  • 2011-10-21
  • 2011-11-19
  • 2012-02-28
  • 1970-01-01
  • 2010-11-29
  • 2011-02-16
  • 1970-01-01
相关资源
最近更新 更多