検索
ホームページJava&#&ベースJavaからExcelにエクスポートした文字化けの原因と解決策

JavaからExcelにエクスポートした文字化けの原因と解決策

Java をエクスポートする間違った方法と正しい方法: (推奨事項 :Java ビデオ チュートリアル )

错误方式:
response.setHeader("Content-Disposition", "inline;filename="+ new String(fileName.getBytes(),"utf-8"));
String fileName =    aicaseNodeDeptService.getFilename(request)+".xlsx";
 
response.setCharacterEncoding("UTF-8");
response.setContentType("application/ms-excel");
正确的方式:
response.setHeader("Content-Disposition",
        "inline;filename="+
                new String(fileName.getBytes("utf-8"),"iso8859-1"));

理由: httpheader では、コンテンツが iso8859 である必要があります。 - 1 エンコーディングの場合、これらの文字を宛先に渡した後、宛先プログラムは逆のメソッド Strings_utf8 = newString(s_iso88591.getBytes("ISO8859-1"),"UTF-8") を使用して正しい中国語文字を取得します。契約への準拠を保証するだけでなく、中国語もサポートします。

Java では、String の getBytes() メソッドは、オペレーティング システムのデフォルトのエンコード形式でバイト配列を取得します。これは、オペレーティング システムが異なると、返される内容が異なることを意味します!

String.getBytes(Stringdecode) メソッドは、次のように、指定されたデコード エンコーディングに従ってエンコーディングで特定の文字列のバイト配列表現を返します。

byte[] b_gbk = "中".getBytes("GBK");
byte[] b_utf8 = "中".getBytes("UTF-8");
byte[] b_iso88591 = "中".getBytes("ISO8859-1");

は、GBK、UTF-8、ISO8859-1 エンコーディングでそれぞれ漢字「中」のバイト配列表現を返します。このとき、

b_gbk の長さは 2、

b_utf8 の長さは 3、

#b_iso88591 の長さは 1 です。

getBytes と比較すると、new String(byte[], decode) を通じて「中」文字を復元できます。

この new String(byte[], decode) は、実際には指定された文字列を使用します。

String s_gbk = new String(b_gbk,"GBK");
String s_utf8 = new String(b_utf8,"UTF-8");
String s_iso88591 = new String(b_iso88591,"ISO8859-1");

s_gbk、s_utf8、s_iso88591 を出力すると、s_gbk と s_utf8 は両方とも「中」であり、s_iso88591 だけが認識されない文字であることがわかります (理解できます)。文字化けとして)、ISO8859-1 エンコードと再結合を使用した後、単語「中」を復元できないのはなぜですか?理由は非常に単純で、ISO8859-1 エンコードのエンコード テーブルには中国語の文字がまったく含まれていないためです。もちろん、ISO8859-1 の正しい「中」文字を「中」.getBytes("ISO8859 -1"); エンコードされた値はすでに存在するため、newString() を通じて復元することはできません。

したがって、String.getBytes(Stringdecode) メソッドを通じて byte[] を取得するときは、String で表されるコード値がデコード エンコード テーブルに実際に存在することを確認する必要があります。正しく復元できます。

注:

中国語の文字を特定の特殊な要件 (コンテンツが ISO8859-1 でエンコードされている必要がある http ヘッダーなど) に適合させるために、中国語の文字がバイト単位でエンコードされる場合があります。形式:

String s_iso88591 = newString("中".getBytes("UTF-8"),"ISO8859-1") のように状況をエンコードするには、この方法で取得した s_iso8859-1 文字列は次のようになります。 ISO8859-1 の文字の場合、これらの文字を宛先に渡した後、宛先プログラムは逆のメソッドを使用します。 Strings_utf8 = newString(s_iso88591.getBytes("ISO8859-

Java の詳細については、注意してください

Java 基本チュートリアル 列.

以上がJavaからExcelにエクスポートした文字化けの原因と解決策の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

MinGW - Minimalist GNU for Windows

MinGW - Minimalist GNU for Windows

このプロジェクトは osdn.net/projects/mingw に移行中です。引き続きそこでフォローしていただけます。 MinGW: GNU Compiler Collection (GCC) のネイティブ Windows ポートであり、ネイティブ Windows アプリケーションを構築するための自由に配布可能なインポート ライブラリとヘッダー ファイルであり、C99 機能をサポートする MSVC ランタイムの拡張機能が含まれています。すべての MinGW ソフトウェアは 64 ビット Windows プラットフォームで実行できます。

mPDF

mPDF

mPDF は、UTF-8 でエンコードされた HTML から PDF ファイルを生成できる PHP ライブラリです。オリジナルの作者である Ian Back は、Web サイトから「オンザフライ」で PDF ファイルを出力し、さまざまな言語を処理するために mPDF を作成しました。 HTML2FPDF などのオリジナルのスクリプトよりも遅く、Unicode フォントを使用すると生成されるファイルが大きくなりますが、CSS スタイルなどをサポートし、多くの機能強化が施されています。 RTL (アラビア語とヘブライ語) や CJK (中国語、日本語、韓国語) を含むほぼすべての言語をサポートします。ネストされたブロックレベル要素 (P、DIV など) をサポートします。

Safe Exam Browser

Safe Exam Browser

Safe Exam Browser は、オンライン試験を安全に受験するための安全なブラウザ環境です。このソフトウェアは、あらゆるコンピュータを安全なワークステーションに変えます。あらゆるユーティリティへのアクセスを制御し、学生が無許可のリソースを使用するのを防ぎます。

SublimeText3 英語版

SublimeText3 英語版

推奨: Win バージョン、コードプロンプトをサポート!

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)