HTML Academy · レッスン

charsetとUnicodeの処理:特殊文字

UTF-8とHTMLエンティティであらゆる文字を正しく表示します

レッスン 4/413 ステップ

「charsetとUnicodeの処理:特殊文字」はCoddyKit上の無料HTML Academyレッスンです。 これはレッスン4/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはHTML Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 HTML Academyコースには全4レッスンが含まれています。

charset宣言

すべてのHTML文書では、文字エンコーディングを宣言する必要があります。標準はUTF-8で、<head>の最初の要素として<meta charset="utf-8">を記述します。これがないとブラウザーが推測することになり、ASCII以外のテキストでは誤判定が起こりやすくなります。

<!doctype html>
<html lang="en">
<head>
  <meta charset="utf-8">
  <title>Page</title>

なぜUTF-8なのか

UTF-8は、あらゆるUnicode文字、つまりすべての文字体系、絵文字、記号をエンコードできます。ASCIIと後方互換性があり(a-zや0-9は1バイトのままです)、現代のWebで最も広く使われているエンコーディングです。2024年時点では、ページの98%以上がUTF-8です。

配置が重要な理由

charsetのmetaタグは、文書の最初の1024バイト以内、通常は<head>の最初の行に記述する必要があります。ブラウザーはそのバイト列からエンコーディングを推測するため、charsetを後から宣言しても推測結果に影響しない場合があります。

ファイルをUTF-8で保存する

metaタグはエンコーディングを宣言するだけであり、エディターが実際にそのエンコーディングでファイルを保存する必要があります。VS Code、IntelliJ、Sublimeは、いずれも最近のバージョンではUTF-8がデフォルトです。Windows-1252やISO-8859-1で保存されたファイルは、正しいmetaタグがあっても文字化けを引き起こします。

HTMLエンティティ

特殊なHTML文字(<、>、&、")は、パーサーの混乱を防ぐためにエスケープする必要があります。<には&lt;、>には&gt;、&には&amp;、"には&quot;を使用します。属性値内では、値を二重引用符で囲む場合に&quot;が必須です。

数値文字参照

任意のUnicode文字は、そのコードポイントで参照できます。雪だるま(☃)には&#9731;または&#x2603;を使用できます。文字を直接入力するのが難しい場合(まれな記号や制御文字など)に便利ですが、エディターが対応しているならリテラルのUnicode文字を優先してください。

絵文字とサロゲートペア

絵文字はU+FFFFを超えるUnicode文字であり、UTF-16(JavaScriptの文字列内部で使われるエンコーディング)ではサロゲートペアとして表現されます。UTF-8では4バイトのシーケンスとしてエンコードされます。charset="utf-8"を設定すれば、絵文字はエンティティを使わずそのまま表示されます。

よくあるエンコーディングのバグ

"Don't"が"Don’t"として表示される場合、ファイルはUTF-8で保存されているのにLatin-1として解釈されています。ファイルをUTF-8で保存し、<meta charset="utf-8">が存在することを確認して修正します。モダンブラウザーがUTF-8をデフォルトにするのは、metaタグがない場合で、かつファイルがUTF-8らしいと判断できる場合だけです。

HTTP Content-Typeヘッダー

サーバーは、レスポンスヘッダーでエンコーディングを宣言することもできます:Content-Type: text/html; charset=utf-8。ヘッダーはmetaタグより優先されるため、正しく記述されたHTMLでも、サーバーの設定が誤っているとエンコーディングのバグが発生することがあります。

フォームの扱い

フォームは、デフォルトではページのエンコーディングを使用して送信されます。UTF-8のページではフォームデータもUTF-8で送信されるため、サーバー側でもUTF-8としてデコードする必要があります。ページのエンコーディングとサーバーのデコード設定の不一致は、多言語サイトでユーザー入力が文字化けする一般的な原因です。

BOMを避ける

UTF-8ファイルの先頭には、バイト順マーク(BOM、0xEF 0xBB 0xBF)が付くことがあります。ほとんどのブラウザーは許容しますが、一部のツールやCDNは対応しておらず、エディターによってはBOMが表示可能な文字として現れることもあります。予期しない問題を避けるため、ファイルは"UTF-8 without BOM"として保存してください。

理解度チェック

HTML文書の最初の1024バイト以内にを記述しなければならないのはなぜですか?

まとめ

<head>の最初の子要素として<meta charset="utf-8">を宣言し、ファイルをUTF-8で保存します。UTF-8は、絵文字やすべての文字体系を含むあらゆるUnicode文字をエンコードします。<、>、&、"はエンティティとしてエスケープし、まれな文字には数値参照を使用します。HTTPのContent-Typeによってmetaタグが上書きされることや、一部のツールでBOMが表示可能な文字として現れることにも注意してください。

無料で開始

AI チューターと学ぶ HTML — 無料

ブラウザでリアルコードを書いて実行し、24/7 の AI チューターから瞬時にサポートを受け、ウェブまたはアプリで続きから学習できます。

コース
40
レッスン
159

よくある質問

「charsetとUnicodeの処理:特殊文字」レッスンは無料ですか?

はい。「charsetとUnicodeの処理:特殊文字」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、HTML Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 HTML Academyコースには全4レッスンが含まれています。

「charsetとUnicodeの処理:特殊文字」で何を学びますか?

UTF-8とHTMLエンティティであらゆる文字を正しく表示します ブラウザで直接実行するハンズオンコードでHTML Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。

HTML Academyを始めるのに経験は必要ですか?

事前経験は必要ありません。CoddyKitのHTML Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン4/4です。

「charsetとUnicodeの処理:特殊文字」レッスンにはどのくらい時間がかかりますか?

ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。

このHTML Academyレッスンでコードを書いて実行できますか?

はい。すべてのHTML Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。

このコースのすべてのレッスン

  1. lang属性とスクリーンリーダー
  2. 右から左へ書くテキストのdir=rtl
  3. bdi要素とbdo要素
  4. charsetとUnicodeの処理:特殊文字
← HTML Academyに戻る