【问题标题】:InputStreamReader encoderInputStreamReader 编码器
【发布时间】:2012-07-04 06:21:19
【问题描述】:

我的问题很简单:

new InputStreamReader(is, "UTF-8");

使β和·看​​起来像问号。

我应该使用哪个编码器来正确查看这些字符?

【问题讨论】:

    标签: java encoding inputstreamreader


    【解决方案1】:

    您应该使用真正输入数据的任何编码。我们不能告诉您,尽管如果您提供旨在表示的 bytes这些角色,我们或许可以提出一些可能性。

    虽然您有时可以应用一些启发式方法来猜测编码,但您真的应该根据数据的来源知道它。在这种情况下,无论您的输入是什么,您都没有给我们任何提示 - 如果它来自网络响应,您应该查看响应的 Content-Type 标头。如果它来自一个文件,它实际上取决于生成该文件的内容。

    编辑:现在我们知道它一个网络响应,当然,你不必自己去标题潜水。您可以使用 HTTP 客户端库,它会为您下载数据并将其解码为字符串本身。

    【讨论】:

    • 嗯,数据来自互联网上的 wiki 页面,所以我真的不知道他们使用的是什么编码。
    • @santirivera92:根据我的回答,查看 Content-Type 标头。或者使用 HTTP 客户端库为您执行此操作...
    • @santirivera92 :如果您使用的是URLConnection,那么您可以使用URLConnection.getHeaderFieldKey("Content-type")URLConnection.getHeaderField("Content-type") 获得Content-Type
    【解决方案2】:

    取自The Java 5.0 Charset documentation

    Charset     Description
    US-ASCII    Seven-bit ASCII, a.k.a. ISO646-US, a.k.a. the Basic Latin block of the Unicode character set
    ISO-8859-1  ISO Latin Alphabet No. 1, a.k.a. ISO-LATIN-1
    UTF-8       Eight-bit UCS Transformation Format
    UTF-16BE    Sixteen-bit UCS Transformation Format, big-endian byte order
    UTF-16LE    Sixteen-bit UCS Transformation Format, little-endian byte order
    UTF-16      Sixteen-bit UCS Transformation Format, byte order identified by an optional byte-order mark
    

    因此,在您的第二个参数中尝试所有这些字符串,直到您获得所需的编码。

    【讨论】:

    • 最后是 ISO-8859-15。非常感谢你们!
    【解决方案3】:

    只是添加其他人所说的最终结果将是在 Java 中的 UTF-8,这将能够处理您拥有的任何字符。但是,这里的问题是您如何读取它,这取决于文件的写入编码,显然不是 UTF-8。

    【讨论】:

      猜你喜欢
      • 2011-02-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-03-12
      • 2011-12-20
      • 2015-05-10
      • 1970-01-01
      相关资源
      最近更新 更多