【问题标题】:Is the encoding name UTF8 or UTF-8?编码名称是 UTF8 还是 UTF-8?
【发布时间】:2012-07-15 10:39:52
【问题描述】:

一些 httpclient 要求我提供一个字符串 charsetµ。

我想知道是否给它 UTF8 或 utf8 或 UTF-8?

尤其是在调用 Charset.forName(enc) 时

【问题讨论】:

    标签: java httpclient


    【解决方案1】:

    更容易使用StandardCharsets.UTF_8,因为它省去了处理 UnsupportedEncodingExceptions 的麻烦

    【讨论】:

    • 没错,等于 Charset.forName("UTF-8")。
    【解决方案2】:

    UTF-8 是标准的,大多数人都使用它。

    以下是 Java 中使用的字符集列表:

    http://docs.oracle.com/javase/8/docs/technotes/guides/intl/encoding.doc.html

    注意
    如果 charset factory/singleton 类可以将Enum 作为参数,以及StringEnum,IMO 总是一个更安全、更好的选择。

    【讨论】:

    • 正确。尽可能使用UTF-8。有几次你会遇到utf8Perl being a very scary example),那么你应该花一些时间了解设计师是否认为他们的utf8UTF-8不同。
    • 好一个,我完全忘记了。自从我用 Perl 编写代码已经有一段时间了(我希望我不必再做这样的事情了 xD)
    • @Konerak 编写 perl 实现的人可能想看看他是否可以将错误处理 unicode 的程序数量从 80% 提高到 99% 的范围。确实很可怕。
    【解决方案3】:

    仅供参考,对于 Java 7/tomcat 8.5,我正在使用:-Dfile.encoding=UTF-8 -Dclient.encoding.override=UTF-8

    但是对于 Java 8/tomcat 8.5,我得到了: java.nio.charset.IllegalCharsetNameException: UTF-8

    所以我改成了UTF8

    【讨论】:

      【解决方案4】:

      标准名称是“UTF-8”。源码(我用的是jdk1.8.0_20)显示的更详细:

      UTF_8 extends Unicode {
          public UTF_8() {
              super("UTF-8", StandardCharsets.aliases_UTF_8); // show other aliases
              // static final String[] aliases_UTF_8 = new String[]{"UTF8", "unicode-1-1-utf-8"};
          }
      
          public String historicalName() {
              // return old name of UTF-8
              return "UTF8";
          }
      

      【讨论】:

        【解决方案5】:
        Charset charset = Charset.forName("cp1254"); 
        

        这对我来说是 utf-8 解决方案。你可以使用它。

        【讨论】:

          猜你喜欢
          • 2011-08-27
          • 2013-02-20
          • 2015-01-17
          • 1970-01-01
          • 1970-01-01
          • 2018-05-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多