ホームページ >運用・保守 >Linuxの運用と保守 >Linux環境でJavaコードが文字化けする

Linux環境でJavaコードが文字化けする

angryTom
angryTomオリジナル
2019-11-07 09:18:263296ブラウズ

Linux環境でJavaコードが文字化けする

Java 言語の文字化けの原因と解決策

a) awt (swing) ベースのグラフィカル インターフェイス プログラムで中国語が文字化けして表示される

awt (swing) ベースのグラフィカル インターフェイス プログラムでは、メニューの中国語表示が文字化けします。一般に、その理由は、JVM が中国語の表示に使用されるフォントを見つけられないためです。JVM には中国語がありません。元のインストールのフォントと、Linux のディストリビューション バージョンが異なり、フォントのパスと名前も異なるため、JVM は通常、Linux オペレーティング システムに含まれるフォントを見つけることができません。解決策は、JVM が次のことをできるようにすることです。 Linux オペレーティング システムに含まれるフォントを検索します。Redflag 6.0 などに付属するフォント ライブラリは、次のコマンドで解決できます:

mkdir /usr/java/jdk1.6.0/jre/lib/fonts/fallback 
ln -s /usr/share/fonts/chinese/TrueType/*.ttf /usr/java/jdk1.6.0/jre/lib/fonts/fallback

通常、フォント構成を変更する必要はありません。 JRE/lib/ ディレクトリ内のファイル (fontconfig.OS.Version.properties)。

b) B/S 構造 JSP (サーブレット) に基づいたシステム クライアント ブラウザで中国語が文字化けして表示される

ページ内の中国語が文字化けして表示される

静的コンテンツの場合HTML ファイルと同様に、ファイルの文字セットは、0f04c5bdbb60794ef339b96987c9e293 の場所に設定されている文字セットと同じである必要があるだけです。ファイル。

JSP やサーブレットなどの動的ファイルの場合、コンパイルが必要です。動作中に、JVM はクラス ファイルを解釈して、クライアントのブラウザが必要とする HTML ファイルを生成します。中国語の文字化けが発生する場合は、通常、コンパイルされて実行され、プロセス中に生成されます。商用 Linux ディストリビューションおよびサーバーを使用する場合、通常は JSP またはサーブレット ファイルを UTF-8 文字セットとして保存し、 UTF-8 に設定するだけです。それでも文字化けが発生する場合は、以下の方法で解決できます。

① サーバーが独自に開発されている場合は、ソースコードを変更して、ファイルの読み取り、ファイルの書き込み、HTML ファイルの生成を JVM に指定することができます。クライアント ブラウザに必要な、文字列とバイナリ シーケンス ストリームを変換するときのエンコード方式を使用することで、問題を根本的に解決し、サーバーの適応性を高めました。MyWebServer 2.0 では、この方式を採用しました。コードは次のとおりです。

new BufferedReader(new InputStreamReader(new FileInputStream(jspfile),”GBK”)); 
new PrintWriter(serfile,”GBK”); 
new PrintWriter(new OutputStreamWriter(os,”GBK”));

② もちろん、サーバーのエントリ ファイル (つまり、メインのサブ関数を含むファイル) 内の JVM の「ロケール」設定を変更することもできます。コードは次のとおりです。 ③商用サーバーを使用する場合、サーバーを起動するシェルファイルを変更し、サーバーを起動する前に環境変数「export LC_ALL=zh_CN.UTF-8」を設定することで、このコンソールのデフォルトの「ロケール」値を変更できます。

④ もちろん、OSの「ロケール」設定を変更することもできますが、OSの「ロケール」設定を変更すると他のアプリケーションに影響を与えるため、一般的にはこの方法が使われます。

上記の方法を使用する主な理由は、JVM を初めて起動するときに、オペレーティング システムの「ロケール」が JVM のデフォルトの「ロケール」に設定されるためです。 「ロケール」値がオペレーティング システムに設定されていません。JVM は、JVM のデフォルトの「ロケール」を JVM のデフォルトの「ロケール」に設定します。もちろん、次の場合に JVM のデフォルトの「ロケール」設定を変更することもできます。 JVM が文字列をバイナリ シーケンス ストリームに変換するとき、エンコード方式が指定されている場合は、指定されたエンコード方式で変換され、それ以外の場合は、JVM のデフォルトの「ロケール」に従って変換されます。

結論

Linux での中国語表示で Java 言語によって生成される文字化けは、主に JVM のフォント ライブラリ、オペレーティング システムのロケール設定、 JVM のデフォルトのロケール設定とアプリケーション 文字列変換の文字セットには、JVM のロケール設定とアプリケーションで直接指定するバイナリ シーケンス ストリームが関係します。これは、バイナリ シーケンス ストリームと文字列の相互変換プロセスで使用される文字エンコード方式が異なるか、JVM が必要なフォントを見つけられないことが原因です。これを解決するには、さまざまな方法を使用できます。使用する具体的な方法は、特定の処理によって異なります。 . アプリケーション環境。

推奨: [

Linux ビデオ チュートリアル

]

以上がLinux環境でJavaコードが文字化けするの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。