RESTful服务器上的ISO到UTF-8

时间:2012-10-10 17:43:49

标签: java rest utf-8 jersey iso

我有一个RESTful服务,需要请求中的字符串。当从浏览器传递字符串时,重音字符会出现乱码( ),因为默认的浏览器编码是ISO-8859-1。如果我将浏览器编码更改为UTF-8,则重音字符将保留在请求字符串中。

有没有办法在服务器端更改字符串编码并重新构造UTF-8中的字符串,这样我每次都不需要更改浏览器编码?

由于

2 个答案:

答案 0 :(得分:1)

我发现大多数浏览器的默认编码取决于他们安装的系统。我的大部分(特别是在Windows上)默认使用ISO-8859-1或CP1252,这与此原始帖子相对应。确保您的http标头和html元标记指定UTF-8编码,并确保您的servlet容器默认设置为使用UTF-8(如果您使用的是tomcat,请参阅http://wiki.apache.org/tomcat/FAQ/CharacterEncoding#Q8)。

有时您仍然可以通过使用(例如)将CP1252逐位粘贴到UTF-8页面上的textarea中的应用程序进行复制粘贴。我没有让这个没有乱码的人工作。

答案 1 :(得分:0)

UTF-8编码标准能够编码任何Unicode代码点。 ISO-8859-1只能处理其中的一小部分。因此,从ISO-8859-1到UTF-8的转码不是问题。当找到不支持的字符时,从UTF-8向后转到ISO-8859-1将导致文本中出现“替换字符”( )。要对您的测试进行转码,您可以这样做:

byte[] utf8 = new String(latin1, "ISO-8859-1").getBytes("UTF-8");

OR

byte[] latin1 = new String(utf8, "UTF-8").getBytes("ISO-8859-1");