-1

Web から文字化けした文字列 ("किसानों के लà¤) を取得しています。これをヒンディー語に変換したいと考えています。 JAVA. 以下のコードを試してみましたが、どういうわけか正しく動作しません。

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

ヒンディー語の文字はほとんど表示されませんが、すべてではありません。� や ? などの奇妙な文字が表示されます。

これを解決するのを手伝ってください。

4

2 に答える 2

3

new String(str.getBytes("ISO-8859-1"), "UTF-8");

これは、実際には UTF-8 であるのに ISO-8859-1 として誤ってデコードされた文字列を復元しようとしています。

しかし、Web ページについて話しているのであれば、おそらく ISO-8859-1 を持っていないでしょう。おそらく Windows コード ページ 1252 を持っています。これは、ISO-8859-1 に似たエンコーディングですが、バイト範囲 0x80 に異なる文字が含まれています。 –0x9F。ISO-8859-1上記のコードを に置き換えるとwindows-1252、サンプル テキストは次のようになります。

किसानों के ल�

これは正しいと思われます(単に切り捨てられました)。

ただし、一般に、誤ってデコードされた文字列を回復しようとすることは避けるべきです。エンコーディングの多くの組み合わせでは、ミスデコーディングにより回復不能なマングリングが発生する可能性があります。最初に正しいエンコーディングを使用して、元のバイトから文字列をデコードする方がはるかに優れています。それをどのように行うかは、どこstrから来たかによって異なります。

于 2013-10-01T21:55:13.163 に答える
0

文字化けした文字列を変換する代わりに、web.xml で Tomcat のフィルタ エンコーディングを変更し、server.xml でコネクタを変更することができます。以下、エントリーです。これにより、Tomcat レベルで文字エンコーディングが変更され、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>

サーバー.xml

コネクタ タグ内

<Connector port="8080" protocol="HTTP/1.1" 
.. 
..
URIEncoding="UTF-8" useBodyEncodingForURI="true" />

于 2020-02-23T08:16:58.570 に答える