目次
まずは文字化けとは何かについて話しましょう
ホームページ よくある問題 中国語の文字化けの原因は何ですか?

中国語の文字化けの原因は何ですか?

Nov 09, 2022 am 11:14 AM
文字化け 中国語文字化け

中国語文字化けの原因:デコード方法とエンコード方法が一致していません。 UTF-8 でエンコードされた中国語の文字は 3 バイトに変換され、gbk でエンコードされた場合は 2 バイトに変換され、UTF-8 でエンコードされた英語の文字は gbk でエンコードされた場合は 1 バイトに変換されます。 1バイトに変換されます。

中国語の文字化けの原因は何ですか?

このチュートリアルの動作環境: Windows 7 システム、Dell G3 コンピューター。

まずは文字化けとは何かについて話しましょう

これを考えたことがある人はいるかわかりませんが、文字列には文字だけでなく、そのエンコード情報も含まれています。たとえば、Java では String str = "Hello" となります。前にも思いましたが、文字列 str はそのエンコード方式である Unicode エンコードや gbk、iso-8859-1 などを隠します。この理解は間違っています。文字は、他の情報を持たない文字です。人がファイル内で見る文字列は、システムが読み取ったメモリ内のデジタル情報であると理解するのが正しいでしょう。そして、それをいくつかの文字にデコードし、最終的に表示します。つまり、ダブルクリックしてテキスト ファイルを開くと、システムはメモリ内のデジタル情報を読み取って表示し、テキスト ファイルを保存すると、設定したエンコード方式でファイルをエンコードします。記憶に。 つまり、文字化けも一部の文字であり、単なる奇妙な文字であり、「コード」はありません。

コード化けの原因について話しましょう

コード化けの原因について、インターネット上でよく説明されています。コード化けは、コード間の不一致によって引き起こされます。デコード方法とエンコード方法 この文章自体は何も問題はありませんが、同じ文章自体は文字化けしたコードをまとめただけであり、コード化けの理解には役立ちません。

そこで聞きたいのは、なぜデコード方式とエンコード方式が異なると文字化けが発生するのかということです。

ここでは例として、utf-8、gbk、iso-8859-1 の 3 つのエンコード方式を示します。

     @Test
     public void testEncode() throws Exception {
        String str = "你好",en = "h?h";
        
        System.out.println("========中文字符utf-8=======");
        byte[] utf8 = str.getBytes(); // 以utf-8方式编码 ,default:utf-8
        for (byte b : utf8) {            
            System.out.print(b + "\t");
        }
        
        System.out.println("\n"+"========英文字符utf-8=======");
        byte[] utf8_en = en.getBytes(); // 以utf-8方式编码 ,default:utf-8
        for (byte b : utf8_en) {            
            System.out.print(b + "\t");
        }
        
        System.out.println("\n"+"========中文字符gbk=========");
        byte[] gbk = str.getBytes("gbk");
        for (byte b : gbk) {            
            System.out.print(b + "\t");
        }
        
        System.out.println("\n"+"========英文字符gbk=========");
        byte[] gbk_en = en.getBytes("gbk");
        for (byte b : gbk_en) {            
            System.out.print(b + "\t");
        }
        
        String s = new String(utf8,"utf-8");
        String s1 = new String(utf8,"gbk");
        System.out.println("\n"+s + "====gbk:" + s1);
     }
ログイン後にコピー

上記のメソッドをテストすると、出力される結果は次のようになります:

========中文字符utf-8=======
-28 -67  -96 -27  -91 -67  
========英文字符utf-8=======
104 63  104 
========中文字符gbk=========
-60 -29  -70 -61  
========英文字符gbk=========
104 63  104 
你好====gbk:浣犲ソ
------------------------------------------------------------------------------------
ログイン後にコピー

次のように結論付けることができます:

中国語の文字が含まれていますutf-8 エンコードは 3 バイトに変換されます。gbk でエンコードされた場合は 2 バイトに変換されます。

utf- でエンコードされた英語文字8は1バイトに変換され、gbkでエンコードされた場合は1バイトに変換されます。

印刷の最後の行とコードの 29 ~ 31 行を組み合わせると、バイト配列 utf8 が utf-8 モードでデコードされると、文字化けがなければ元の「Hello」のままで、gbk モードでデコードすると文字化けが 3 つ表示されます。なぜ 2 ではなく 3 なのでしょうか? 6/2=3 です。

次に、iso-8859-1 について説明します。このエンコーディングは英語シリーズに適用されているため、中国語を表すことができません (これを使用したい場合は、互換性のある他のエンコーディングに依存する必要があります) ISO-8859-1 エンコード方式を使用します)。読めない文字は英語の疑問符 '?' として扱われます。ISO-8859-1 エンコードによる英語の疑問符の数は、63 (10 進数) です (実際、ほとんどすべてのエンコーディングでメソッドでは、Unicode エンコーディングを除き、すべての英語文字は 1 バイトコード表現で固定されます。

     @Test
     public void testISO() throws Exception {
         String str = "你好";
         byte[] bs = str.getBytes("iso-8859-1");
         for (byte b : bs) {
            System.out.println(b);
         }
         System.out.println(new String(bs,"iso-8859-1"));
         System.out.println(new String(bs,"utf-8"));
         System.out.println(new String(bs,"gbk"));
         System.out.println(new String(bs,"unicode"));         
     }
ログイン後にコピー

出力結果

63
63
??
??
??
㼿
ログイン後にコピー

説明 63 =》?、すべての中国語が考慮されます? したがって、このコードが実行されると、 byte[] bs = "Hello".getBytes ("iso-8859 -1");情報が失われました。

Execute String str = new String(bs, "any charset"); str は "Hello" ではなくなり、疑問符 2 つになります??。そのため、Tomcat では漢字が ???? という長い文字列に変化することがよくありますが、これが原因です。

iso-8859-1、utf-8、gbk では、1 バイトコードで英語の文字を表します

Unicode エンコードでは、1 バイトコードで文字を表すことはできず、規定されています文字を表すための 2 つのバイトコード (場合によっては 4)。

ここまで言うと、なぜこんなに多くのエンコード方式が使われているのかと疑問に思われるかもしれませんが、すべての文字を表現するにはutf-8に統一することはできないのでしょうか?

エンコーディングでは、文字を表現できるかどうかだけでなく、送信と保存も考慮されます。

1. UTF-8 は実際、ほぼすべての既知の文字を表すことができます。前述したように、UTF-8 エンコーディングでは漢字を表すのは 3 バイトのみであり、これは明らかにスペースを消費し、送信と保存には適していません (送信と保存は両方ともバイナリで実行されます)

2。 iso-8859-1 など、最もスペースを節約する方法では、1 バイトが 1 文字を表します。しかし、世界には英語だけではなく、さまざまな地域や国のキャラクターが存在します。したがって、文字数は 2 の 8 乗より大きくなければなりません。

したがって、上記の 2 つの点を組み合わせると、自然に多くのエンコード方法が現れます。

さまざまなエンコード方法のルールを理解する: https://jingyan.baidu.com/article/020278118741e91bcd9ce566.html

プログラミング関連の知識について詳しくは、プログラミング教育をご覧ください。 !

以上が中国語の文字化けの原因は何ですか?の詳細内容です。詳細については、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ヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

Linuxで中国語の文字化けを解決する方法 Linuxで中国語の文字化けを解決する方法 Feb 21, 2024 am 10:48 AM

Linux の中国語の文字化け問題は、中国語の文字セットとエンコーディングを使用する場合によく見られる問題です。文字化けは、ファイルのエンコード設定が正しくない、システム ロケールがインストールまたは設定されていない、端末の表示設定エラーなどが原因で発生する可能性があります。この記事では、いくつかの一般的な回避策を紹介し、具体的なコード例を示します。 1. ファイルのエンコード設定を確認します。ファイルのエンコードを表示するには file コマンドを使用します。ターミナルで file コマンドを使用して、ファイルのエンコードを表示します: file-ifilename。出力に「charset」がある場合

Tomcat 起動時に文字化けしたコードを解決する方法 Tomcat 起動時に文字化けしたコードを解決する方法 Dec 26, 2023 pm 05:21 PM

Tomcat 起動時の文字化けの解決策: 1. Tomcat の conf 設定ファイルを変更する; 2. システム言語を変更する; 3. コマンド ライン ウィンドウのエンコードを変更する; 4. Tomcat サーバーの設定を確認する; 5. プロジェクトのエンコードを確認する; 6. ログを確認するファイル; 7 、他の解決策を試してください。詳細な導入: 1. Tomcat の conf 構成ファイルを変更し、Tomcat の conf ディレクトリを開き、「logging.properties」ファイルなどを見つけます。

Windows10で中国語が文字化けする問題を解決する方法 Windows10で中国語が文字化けする問題を解決する方法 Jan 16, 2024 pm 02:21 PM

Windows 10では文字化けが多発しております。多くの場合、この背後にある理由は、オペレーティング システムが一部の文字セットのデフォルト サポートを提供していないか、設定された文字セット オプションにエラーがあることです。適切な薬を処方するために、実際の操作手順を以下で詳しく分析します。 Windows 10 の文字化けコードを解決する方法 1. 設定を開いて「時刻と言語」を見つけます 2. 次に「言語」を見つけます 3. 「言語設定の管理」を見つけます 4. ここで「システム地域設定の変更」をクリックします 5. 図のようにボックスをチェックしますそして、「必ず確認してください」をクリックします。

PHP Dompdfの中国語文字化け問題を解決する方法 PHP Dompdfの中国語文字化け問題を解決する方法 Mar 05, 2024 pm 03:45 PM

PHPDompdf の中国語文字化け問題を解決する方法 PHPDompdf は、HTML 文書を PDF ファイルに変換するツールで、強力で使いやすいです。ただし、中国語のコンテンツを処理すると、中国語の文字化けの問題が発生することがあります。この記事では、PHPDompdf の中国語文字化け問題を解決するいくつかの方法と具体的なコード例を紹介します。 1. フォント ファイルを使用して中国語コンテンツを処理する場合、よくある問題は、Dompdf がデフォルトで中国語コンテンツをサポートしていないことです。

dllファイルを開くときに文字化けする問題を解決する編集方法 dllファイルを開くときに文字化けする問題を解決する編集方法 Jan 06, 2024 pm 07:53 PM

多くのユーザーがコンピュータを使用していると、拡張子が dll のファイルがたくさんあることに気づきますが、そのファイルの開き方が分からないユーザーも多いので、知りたい方は以下を参照してください。 dll ファイルを開いて編集するには: 1. 「exescope」というソフトウェアをダウンロードし、インストールします。 2. 次に、dll ファイルを右クリックし、[exescope でリソースを編集] を選択します。 3. ポップアップ エラー プロンプト ボックスで [OK] をクリックします。 4. 次に、右側のパネルで、各グループの前にある「+」記号をクリックして、グループに含まれるコンテンツを表示します。 5. 表示したい dll ファイルをクリックし、「ファイル」をクリックして「エクスポート」を選択します。 6. そうすれば、次のことができます

win11のメモ帳の文字化け問題を解決する win11のメモ帳の文字化け問題を解決する Jan 05, 2024 pm 03:11 PM

友人の中には、メモ帳を開こうと思っていますが、Win11 のメモ帳が文字化けしていることに気づき、どうすればよいかわかりませんが、実際には、通常は地域と言語を変更するだけで十分です。 Win11 メモ帳が文字化けする: 最初のステップ、検索機能を使用し、「コントロール パネル」を検索して開きます。 2 番目のステップ、時計と地域の下の [日付、時刻、または数値形式の変更] をクリックします。 3 番目のステップ、カードの上にある [管理] オプションをクリックします。 4 番目のステップでは、下の [システムの地域設定の変更] をクリックし、5 番目のステップでは、現在のシステムの地域設定を [中国語 (簡体字、中国)] に変更し、[OK] をクリックして保存します。

filezillaの文字化けを解決する方法 filezillaの文字化けを解決する方法 Nov 20, 2023 am 10:16 AM

filezilla の文字化けの解決策は次のとおりです: 1. エンコード設定を確認する; 2. ファイル自体を確認する; 3. サーバー構成を確認する; 4. 他の転送ツールを試す; 5. ソフトウェアのバージョンを更新する; 6. ネットワークの問題を確認する; 7 . 技術サポートを求めてください。 FileZillaの文字化け問題を解決するには、多方面から始めて徐々に原因を究明し、それに応じた対策を講じて修復する必要があります。

MySQL インストールにおける中国語の文字化けの一般的な原因と解決策 MySQL インストールにおける中国語の文字化けの一般的な原因と解決策 Mar 02, 2024 am 09:00 AM

MySQL インストール時に中国語が文字化けする一般的な原因と解決策 MySQL は一般的に使用されるリレーショナル データベース管理システムですが、使用中に中国語の文字化けの問題が発生し、開発者やシステム管理者を悩ませることがあります。中国語の文字化けの問題は、主に文字セットの設定が間違っていることや、データベースサーバーとクライアントの間で文字セットが一致していないことが原因で発生します。この記事では、MySQL インストールにおける中国語の文字化けの一般的な原因と解決策を詳しく紹介し、誰もがこの問題をよりよく解決できるようにします。 1. よくある理由: 文字セットの設定