我从网上收到乱码字符串(“किसानोà¤, के लà¤),我想将其转换为印地语JAVA. 我试过下面的代码,但不知何故它不能正常工作,
s = new String(str.getBytes("ISO-8859-1"), "UTF-8");
它显示很少的印地语字符,但不是全部。它显示奇怪的字符,如 � 和 ?。
请帮我解决这个问题。
我从网上收到乱码字符串(“किसानोà¤, के लà¤),我想将其转换为印地语JAVA. 我试过下面的代码,但不知何故它不能正常工作,
s = new String(str.getBytes("ISO-8859-1"), "UTF-8");
它显示很少的印地语字符,但不是全部。它显示奇怪的字符,如 � 和 ?。
请帮我解决这个问题。
新字符串(str.getBytes(“ISO-8859-1”),“UTF-8”);
这是试图恢复一个实际上是 UTF-8 时被错误解码为 ISO-8859-1 的字符串。
但是如果你在谈论网页,那么你可能没有 ISO-8859-1,你可能有 Windows 代码页 1252,一种类似于 ISO-8859-1 的编码,但在字节范围 0x80 中有不同的字符–0x9F。如果您ISO-8859-1
在上面的代码中替换为windows-1252
,您的示例文本将显示为:
किसानों के ल�
这似乎更接近正确(只是被截断)。
不过,一般来说,要避免尝试恢复解码错误的字符串。对于许多编码组合,错误解码可能会导致不可恢复的重整。首先使用正确的编码从原始字节解码字符串要好得多。你如何做到这一点取决于你从哪里来str
。
Instead of converting the garbled string, you can do some changes in your tomcat's filter encoding in web.xml and connector modifications in server.xml. Below are the entries. This will change the character encoding at tomcat level, and you will get the exact characters you passed via javascript.
web.xml
<filter> <filter-name>encodingFilter</filter-name> <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class> <init-param> <param-name>encoding</param-name> <param-value>UTF-8</param-value> </init-param> <init-param> <param-name>forceEncoding</param-name> <param-value>true</param-value> </init-param> </filter>
<filter-mapping> <filter-name>encodingFilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>
server.xml
in connector tag
<Connector port="8080" protocol="HTTP/1.1"
..
..
URIEncoding="UTF-8" useBodyEncodingForURI="true" />