一言でjava文字化けしてわかる
1439 ワード
どの符号化方式を設定するかという前提は、文字列のソースがどの符号化方式なのかを知っていることです.これはすべての文字化けの原因を解いた.つまり、文字列のソースの符号化方式に従って使用したり伝送したりしていないからだ.文字列の一般的なソースにはjavaソースコードやclassファイル、データベースデータ、ファイルなどがあります.ソースで文字列を定義するとき、私たちはきっと何らかの符号化方法で彼を符号化しています.文字は符号化してこそコンピュータに保存できるので、私たちは覚えています.ソースがどのように符号化されているかでは、この文字列をどのように使用しても問題はありません.たとえば、javaコードで文字列String str=「hello私は文字列です」を定義します.私たちのjavaファイルは一般的にUTF-8で保存されています.windowsの生産環境でコードを実行するときに、str.getBytes()が呼び出される文字列MD 5の暗号化に使用されます.ここでgetBytes()を使用するときは、jvm-Dfile.encodingも明確に指定されていません.このときjvmはシステムのデフォルトの符号化方式GBKを取ります.str.getBytes(「GBK」)が呼び出されたことに相当する.1つのソースはUTF-8の文字列です.私たちはGBKで使用しています.どのように変換しても間違っています.逆は同じです.
データベースとファイルの中の文字も同じ理屈です.例えば、javaプラットフォームはデータベースの中でデータを取ってC++プラットフォームに転送します.もし私たちのデータベースの文字がGBKで正常に表示されている符号化であれば、私たちがC++プラットフォームに転送するときはGBKで復号して彼に転送します.C++エンドが手に入れた後もGBKで符号化してから正常に表示されます.
この理屈を理解してjvm-Dfile.encoding=UTF-8を設定して文字化けし問題を解決したのは、あなたの文字のソースがUTF-8なので、getBytes()を設定したときに正しい符号化方式を指定しても効果は同じです.また、JSP、HTML、txtなど、文字の符号化方式に関するすべての点も同様であり、私たちがどのような符号化方式で文字を正しく使用するかは、彼のソースに依存します.
したがって、この問題を徹底的に解決する方法は、文字列のソースがどのような符号化方式であるかを知り、ソースの符号化方式で文字を使用し、伝送することである.
データベースとファイルの中の文字も同じ理屈です.例えば、javaプラットフォームはデータベースの中でデータを取ってC++プラットフォームに転送します.もし私たちのデータベースの文字がGBKで正常に表示されている符号化であれば、私たちがC++プラットフォームに転送するときはGBKで復号して彼に転送します.C++エンドが手に入れた後もGBKで符号化してから正常に表示されます.
この理屈を理解してjvm-Dfile.encoding=UTF-8を設定して文字化けし問題を解決したのは、あなたの文字のソースがUTF-8なので、getBytes()を設定したときに正しい符号化方式を指定しても効果は同じです.また、JSP、HTML、txtなど、文字の符号化方式に関するすべての点も同様であり、私たちがどのような符号化方式で文字を正しく使用するかは、彼のソースに依存します.
したがって、この問題を徹底的に解決する方法は、文字列のソースがどのような符号化方式であるかを知り、ソースの符号化方式で文字を使用し、伝送することである.
//
new String(request.getParameter("bigType").getBytes("iso8859-1"),"utf-8")%>