検索
ホームページJava&#&チュートリアル基礎入門~JAVA文字セットの詳細説明

  1. 概要

    この記事には主にコーディング、Java、システムソフトウェア、URL、ツールソフトウェアなどの基礎知識が含まれています。

    以下の説明では、単語「中国語」を例として取り上げます。テーブルを調べると、GB2312 エンコードは「d6d0 cec4」、Unicode エンコードは「4e2d 6587」、UTF であることがわかります。エンコードは「e4b8ad e69687」です。これら 2 つの文字には iso8859-1 エンコードがありませんが、iso8859-1 エンコードで「表現」できることに注意してください。

    2. エンコーディングの基礎知識

    最も古いエンコーディングは iso8859-1 で、ASCII エンコーディングに似ています。しかし、さまざまな言語の表現を容易にするために、多くの標準エンコーディングが徐々に登場してきました。重要なものは次のとおりです。

    2.1. iso8859-1

    はシングルバイトエンコーディングであり、表現できる最大文字範囲は 0 ~ 255 であり、英語シリーズに適用されます。たとえば、文字「a」のエンコードは 0x61=97 です。

    iso8859-1 エンコードで表現される文字範囲は非常に狭く、漢字を表現できないことは明らかです。ただし、iso8859-1 エンコードはシングルバイトエンコードであり、コンピュータの最も基本的な表現単位と一致しているため、多くの場合で今でも使用されています。また、多くのプロトコルでは、このエンコーディングがデフォルトで使用されます。たとえば、「中国語」という単語は iso8859-1 エンコードには存在しませんが、gb2312 エンコードを例にとると、iso8859-1 エンコードを使用すると、「d6d0 cec4」の 2 文字になるはずです。表します: "d6 d0 ce c4" (実際には、格納するときもバイト単位で処理されます)。また、UTFエンコードの場合は「e4 b8 ad e6 96 87」の6バイトになります。明らかに、この表現は別のエンコーディングに基づく必要があります。

    2.2. GB2312/GBK

    これは漢字を表すために特別に使用される漢字の国家標準コードであり、英語の文字は iso8859-1 と互換性があります。 1エンコーディング)。このうち、gbk エンコードは繁体字と簡体字を同時に表現できますが、gb2312 は簡体字のみを表現できます。

    2.3. unicode

    これは、すべての言語の文字を表すために使用できる最も統一されたエンコーディングであり、英語の文字を含む固定長の 2 バイト (4 バイトも) エンコーディングです。そのため、iso8859-1 エンコーディングと互換性がなく、どのエンコーディングとも互換性がないと言えます。ただし、iso8859-1 エンコードと比較すると、uniocode エンコードでは先頭に 0 バイトが追加されるだけです。たとえば、文字「a」は「00 61」になります。

    固定長エンコーディングはコンピューターで処理しやすいことに注意してください (GB2312/GBK は固定長エンコーディングではないことに注意してください)。Unicode はすべての文字を表すために使用できるため、多くの言語で内部的に Unicode エンコーディングが使用されています。 Javaなどのソフトウェア。

    2.4. UTF

    Unicode エンコードは iso8859-1 エンコードと互換性がなく、より多くのスペースを占有しやすいことを考慮すると、英語の文字の場合、Unicode は表現するのに 2 バイトも必要となるためです。したがって、Unicode は送信や保存には不便です。したがって、UTF エンコードは ISO8859-1 エンコードと互換性があり、すべての言語の文字を表すために使用できます。ただし、UTF エンコードは可変長エンコードであり、各文字の長さの範囲は 1 ~ 6 です。バイト。また、UTFエンコードには簡易検証機能が付いています。一般に、英語の文字は 1 バイトで表現されますが、中国語の文字は 3 バイトで表現されます。

    UTF は使用するスペースを減らすために使用されますが、それは Unicode エンコードと比較されているだけであることに注意してください。それが中国語の文字であることがすでにわかっている場合は、間違いなく GB2312/GBK を使用するのが最も経済的です。しかしその一方で、UTF エンコードでは中国語の Web ページであっても 3 バイトを使用しますが、Web ページには英語の文字が多く含まれているため、UTF エンコードの方が Unicode エンコードよりも節約できることにも注意してください。

    3. Java による文字の処理

    Java アプリケーション ソフトウェアでは、文字セットのエンコードに関わる箇所が多く、正しい設定が必要な箇所もあれば、ある程度の処理が必要な箇所もあります。

    3.1. getBytes(charset)

    これは、文字列で表される文字を charset に従ってエンコードし、バイト単位で表すことのできる標準関数です。文字列は常に Unicode エンコードで Java メモリに格納されることに注意してください。たとえば、「中国語」は、通常の状況 (つまり、エラーがない場合) では「4e2d 6587」として格納されます。文字セットが「gbk」の場合、「d6d0 cec4」としてエンコードされ、次にバイト「d6」がエンコードされます。 d0 ce c4」が返されます。文字セットが「utf8」の場合、末尾は「e4 b8 ad e6 96 87」となります。 「iso8859-1」の場合はエンコードできないため、最終的には「3f 3f」(疑問符2つ)が返されます。

    3.2. 新しい文字列(文字セット)

    これは、Java 文字列処理のもう 1 つの標準関数であり、前述の関数とは逆で、文字セット エンコーディングに従ってバイト配列を結合して識別し、最終的に格納するために Unicode に変換します。上記の getBytes の例を参照すると、「gbk」と「utf8」は両方とも正しい結果「4e2d 6587」を取得できますが、iso8859-1 は最終的に「003f 003f」(疑問符 2 つ)になります。

    utf8 はすべての文字の表現/エンコードに使用できるため、 new String(str.getBytes("utf8"), "utf8") === str となり、完全に元に戻すことができます。

    3.3. setCharacterEncoding()

    この関数は、http リクエストまたは対応するエンコーディングを設定するために使用されます。

    リクエストの場合、送信されたコンテンツのエンコーディングを参照します。指定しない場合は、デフォルトで iso8859-1 エンコーディングが使用されます。これには追加の処理が必要です。下記の「フォーム入力」を参照してください。 setCharacterEncoding() が実行される前に getParameter() を実行することはできないことに注意してください。 Java ドキュメントには次のように記載されています。このメソッドは、リクエスト パラメータを読み取る前、または getReader() を使用して入力を読み取る前に呼び出す必要があります。また、この指定は POST メソッドに対してのみ有効であり、GET メソッドに対しては有効ではありません。理由を分析すると、最初の getParameter() を実行するときに、Java は送信されたすべてのコンテンツをエンコーディングに従って分析し、その後の getParameter() は分析されなくなるため、setCharacterEncoding() が無効になるためです。フォームを送信する GET メソッドの場合、送信内容は URL 内にあり、送信内容はすべて最初からエンコーディングに従って解析されているため、当然 setCharacterEncoding() は無効になります。

    応答の場合、出力コンテンツのエンコーディングを指定します。同時に、この設定はブラウザーに渡され、コンテンツの出力に使用されるエンコーディングをブラウザーに伝えます。

    3.4. 処理プロセス

    以下では、Java がコーディング関連の問題をどのように処理するかを説明するために、2 つの代表的な例を分析します。

    3.4.1. フォーム入力

    ユーザー入力 *(gbk:d6d0 cec4) ブラウザ *(gbk:d6d0 cec4) Web サーバー iso8859-1(00d6 00d 000ce 00c4) クラス、クラス: getbytes で処理する必要があります(" iso8859-1") は d6 d0 ce c4、new String("gbk") は d6d0 cec4、メモリ内の Unicode エンコーディングは 4e2d 6587 です。

    l ユーザーが入力したエンコーディング方法は、ページで指定されたエンコーディングに関連しており、またユーザーのオペレーティング システムにも関連しているため、不確実です。上記の例では、例として gbk を使用しています。

    ブラウザーから Web サーバーまで、フォームでコンテンツを送信するときに使用する文字セットを指定できます。それ以外の場合は、ページで指定されたエンコードが使用されます。また、? を使用してパラメータを URL に直接入力する場合、現時点ではページとは関係がないため、エンコードはオペレーティング システム自体のエンコードであることがよくあります。上記では、例として gbk エンコーディングを使用しています。

    Web サーバーが受信するものは、デフォルト (getParameter) では、iso8859-1 エンコーディングで処理されます。結果は正しくないため、処理する必要があります。ただし、エンコーディングが事前に設定されている場合 (request.setCharacterEncoding() を通じて)、正しい結果を直接取得できます。

    ページでエンコードを指定することは良い習慣です。そうしないと、制御を失い、正しいエンコードを指定できなくなる可能性があります。


上記は、JAVA 文字セットの基本的な説明です。その他の関連記事については、PHP 中国語 Web サイト (www.php.cn) に注目してください。

声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?高度なJavaプロジェクト管理、自動化の構築、依存関係の解像度にMavenまたはGradleを使用するにはどうすればよいですか?Mar 17, 2025 pm 05:46 PM

この記事では、Javaプロジェクト管理、自動化の構築、依存関係の解像度にMavenとGradleを使用して、アプローチと最適化戦略を比較して説明します。

適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか?適切なバージョン化と依存関係管理を備えたカスタムJavaライブラリ(JARファイル)を作成および使用するにはどうすればよいですか?Mar 17, 2025 pm 05:45 PM

この記事では、MavenやGradleなどのツールを使用して、適切なバージョン化と依存関係管理を使用して、カスタムJavaライブラリ(JARファイル)の作成と使用について説明します。

カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか?カフェインやグアバキャッシュなどのライブラリを使用して、Javaアプリケーションにマルチレベルキャッシュを実装するにはどうすればよいですか?Mar 17, 2025 pm 05:44 PM

この記事では、カフェインとグアバキャッシュを使用してJavaでマルチレベルキャッシュを実装してアプリケーションのパフォーマンスを向上させています。セットアップ、統合、パフォーマンスの利点をカバーし、構成と立ち退きポリシー管理Best Pra

キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPA(Java Persistence API)を使用するにはどうすればよいですか?Mar 17, 2025 pm 05:43 PM

この記事では、キャッシュや怠zyなロードなどの高度な機能を備えたオブジェクトリレーショナルマッピングにJPAを使用することについて説明します。潜在的な落とし穴を強調しながら、パフォーマンスを最適化するためのセットアップ、エンティティマッピング、およびベストプラクティスをカバーしています。[159文字]

Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?Javaのクラスロードメカニズムは、さまざまなクラスローダーやその委任モデルを含むどのように機能しますか?Mar 17, 2025 pm 05:35 PM

Javaのクラスロードには、ブートストラップ、拡張機能、およびアプリケーションクラスローダーを備えた階層システムを使用して、クラスの読み込み、リンク、および初期化が含まれます。親の委任モデルは、コアクラスが最初にロードされ、カスタムクラスのLOAに影響を与えることを保証します

See all articles

ホット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ヘンタイを無料で生成します。

ホットツール

mPDF

mPDF

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

SecLists

SecLists

SecLists は、セキュリティ テスターの究極の相棒です。これは、セキュリティ評価中に頻繁に使用されるさまざまな種類のリストを 1 か所にまとめたものです。 SecLists は、セキュリティ テスターが必要とする可能性のあるすべてのリストを便利に提供することで、セキュリティ テストをより効率的かつ生産的にするのに役立ちます。リストの種類には、ユーザー名、パスワード、URL、ファジング ペイロード、機密データ パターン、Web シェルなどが含まれます。テスターはこのリポジトリを新しいテスト マシンにプルするだけで、必要なあらゆる種類のリストにアクセスできるようになります。

EditPlus 中国語クラック版

EditPlus 中国語クラック版

サイズが小さく、構文の強調表示、コード プロンプト機能はサポートされていません

SublimeText3 Linux 新バージョン

SublimeText3 Linux 新バージョン

SublimeText3 Linux 最新バージョン

Dreamweaver Mac版

Dreamweaver Mac版

ビジュアル Web 開発ツール