从“ISO-8859-1”转换为“UTF-8”时,除0x00-0x7F外的字符未显示

时间:2010-03-13 16:05:50

标签: java utf-8 character-encoding

我需要从浏览器的URL请求中获取一个字符串,然后按请求的文本创建文本图像。我知道Java网络传输的默认编码是“ISO-8859-1”,它可以正常使用“ISO-8859-1”中定义的所有字符。但是当我请求一个多字节的Unicode字符(例如中文或类似¤ж)时,我需要通过“ISO-8859-1”中的“UTF-8”对其进行解码。

我的代码如:

String reslut = new String(requestString.getBytes("ISO-8859-1"), "UTF-8");

一切都很好,但我发现ISO-8859-1中的一些字符现在没有显示,哪些字符是0x80 - 0xFF(在“ISO-8859-1”中定义),即除了0x00-0x7F之外的字符是从“ISO-8859-1”转换为“UTF-8”时未显示

任何其他方法都可以解决此问题吗?

2 个答案:

答案 0 :(得分:3)

  

我知道Java网络传输的默认编码是“ISO-8859-1”

我不确定你的意思,但这在网络中并不正确。所有内容都在字节上。也许你将它与InputStreamReader的默认编码混淆,你尝试将字节流作为字符读取。为字节流构造InputStreamReader时,应使用the constructor which takes the encoding as 2nd argument。 E.g。

Reader reader = new InputStreamReader(connection.getInputStream(), "UTF-8");

如果您实际使用java.net.URLConnection,则应首先从Content-Type header过滤编码并将其应用为编码。

答案 1 :(得分:1)

你要做的事情并没有多大意义。大多数ISO-8859-1字符串不能解释为UTF-8字符串。

此外,ISO-8859-1中不能编码中文字符(ISO-8859-1是为西欧语言设计的)。