【发布时间】:2012-07-04 06:21:19
【问题描述】:
我的问题很简单:
new InputStreamReader(is, "UTF-8");
使β和·看起来像问号。
我应该使用哪个编码器来正确查看这些字符?
【问题讨论】:
标签: java encoding inputstreamreader
我的问题很简单:
new InputStreamReader(is, "UTF-8");
使β和·看起来像问号。
我应该使用哪个编码器来正确查看这些字符?
【问题讨论】:
标签: java encoding inputstreamreader
您应该使用真正输入数据的任何编码。我们不能告诉您,尽管如果您提供旨在表示的 bytes这些角色,我们或许可以提出一些可能性。
虽然您有时可以应用一些启发式方法来猜测编码,但您真的应该根据数据的来源知道它。在这种情况下,无论您的输入是什么,您都没有给我们任何提示 - 如果它来自网络响应,您应该查看响应的 Content-Type 标头。如果它来自一个文件,它实际上取决于生成该文件的内容。
编辑:现在我们知道它是一个网络响应,当然,你不必自己去标题潜水。您可以使用 HTTP 客户端库,它会为您下载数据并将其解码为字符串本身。
【讨论】:
URLConnection,那么您可以使用URLConnection.getHeaderFieldKey("Content-type") 和URLConnection.getHeaderField("Content-type") 获得Content-Type
取自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
因此,在您的第二个参数中尝试所有这些字符串,直到您获得所需的编码。
【讨论】:
只是添加其他人所说的最终结果将是在 Java 中的 UTF-8,这将能够处理您拥有的任何字符。但是,这里的问题是您如何读取它,这取决于文件的写入编码,显然不是 UTF-8。
【讨论】: