HTMLに使へる文字

公開 : 2006/10/06 ; 改訂 : 2006/10/15 © 平頭通

HTMLで使用できる文字は豫め決つてゐます。正字正かな派の場合、可能な限り正字のはうを使ひたいのだとは思ひますが、決められた範囲内の文字を使ふやうに心掛けて下さい。

又、「半角カタカナ」(半角カナ)が各文字コードに依つてどのやうに扱はれてゐるかを記録しておきます。

RFC1866

"RFC1866"は、"Hypertext Markup Language - 2.0"と呼ばれるRFC文書です。"HTML 2.0"の規格を定義してゐます。其の中に、"9.5. SGML Declaration for HTML"(9.5. HTMLのSGML宣言)と呼ばれる章が在り、其処で、"HTML 2.0"で使用できる文字の種類が規定されてゐます。下記に規定を示してみます。

CHARSET
         BASESET  "ISO 646:1983//CHARSET
                   International Reference Version
                   (IRV)//ESC 2/5 4/0"
         DESCSET  0   9   UNUSED
                  9   2   9
                  11  2   UNUSED
                  13  1   13
                  14  18  UNUSED
                  32  95  32
                  127 1   UNUSED
         BASESET  "ISO Registration Number 100//CHARSET
                  ECMA-94 Right Part of
                  Latin Alphabet Nr. 1//ESC 2/13 4/1"

         DESCSET  128  32   UNUSED
                  160  96    32

上記の定義では、0(0x00)から31(0x1F)迄の制御文字の領域の中では、9の"HT"(水平タブ)と、10の"NL"(改行)と、13の"CR"(復帰)と、三つの文字丈が使用できる事になつてゐます。27の"ESC"(拡張)と、127の"DEL"(削除)は、UNUSEDです。

"ISO646"は、米国のASCIIを定義してゐます。7bitで文字を表現する1byteの文字コードです。0(0x00)から31(0x1F)迄は制御文字、32(0x20)は"SP"(空白)、33(0x21)から126(0x7E)は図形文字、127(0x7F)は"DEL"(削除)として夫々規定してゐます。図形文字は、"!"から"~"迄の半角ローマ字が定義されてゐます。

"Latin Alphabet Nr. 1"(Latin1)は、"ISO8859-1"で規定されてゐる「ラテン-1補助」に該当する文字を言ひます。160(0xA0)から255(0xFF)に図形文字を定義してゐます。

"JIS X 0201"では、ASCIIに相当する「ローマ字」と、「半角カナ」を規定してゐます。制御文字(C0)の領域は同一ですが、図形文字(GL)の領域では、92(0x5C)が"¥"、126(0x7E)が"¯"になる為、二文字分の相違が生じてしまひます。又、図形文字(GR)の領域では「半角カナ」が規定されてゐます。

"HTML 2.0"では、之等の文字しか使へない事になつてゐますので、"JIS X 0201"で規定されてゐる「半角カナ」は、"ISO8859-1"の規定と衝突する為、使用できませんし、漢字は、2byte文字の規定が無いので使用できません。

改行コード

基本ソフト(OS, オペレーティングソフト)の相違に依つて、改行コードの使はれ方が変化してゐますので、茲に纏めておきます。

UNIXの場合は、"LF"(改行)のみを使ひます。Macintoshでは、"CR"(復帰)のみを使ひます。Windowsでは、"CR"と"LF"とを両方使用して改行を行ひます。UNIXで作成した文書をWindowsで開くと改行されてゐないやうに見えてしまふのは、改行コードの相違に由来してゐます。HTML文書では、全ての改行コードが使用可となつてゐます。

文字実体参照

HTML文書では、マーク附けの為に使用される文字を表現したい場合は、文字実体参照や数値文字参照を使用して表現する事になつてゐます。外にも色々と規定されてゐますが、少くとも以下に示す参照方法を使用する必要があります。

             記号    文字実体参照   数値文字参照   記号の種類
           --------- ------------   ------------   ------------
             &         &          &        アンパサンド
	     <         &lt;           &#60;        小なり記号
	     >         &gt;           &#62;        大なり記号

RFC2070

"RFC2070"は、"Internationalization of the Hypertext Markup Language"と呼ばれるRFC文書です。"RFC1866"を国際化した規格として"HTML i18n"を定義してゐます。其の中に、"7.2. SGML Declaration for HTML"(7.2. HTMLのSGML宣言)と呼ばれる章が在り、其処で、"HTML i18n"で使用できる文字の種類が規定されてゐます。下記に規定を示してみます。

CHARSET
         BASESET  "ISO Registration Number 177//CHARSET
                   ISO/IEC 10646-1:1993 UCS-4 with
                   implementation level 3//ESC 2/5 2/15 4/6"
         DESCSET  0   9     UNUSED
                  9   2     9
                  11  2     UNUSED
                  13  1     13
                  14  18    UNUSED
                  32  95    32
                  127 1     UNUSED
                  128 32    UNUSED
                  160 2147483486 160

159迄の規定は、"RFC1866"(HTML 2.0)と同様ですので、ASCIIは普通に使用できます。160から先は、"ISO/IEC 10646-1"に規定される全ての文字が使用できるやうになつてゐます。

"ISO/IEC 10646-1"は、Unicodeと呼ばれる文字集合です。ASCII以外に、ひらがなやカタカナや漢字などの文字も多数収録されてゐます。規定では、160から2147483486番目まで使用可能となつてゐますので、2147483645(0x7FFFFFFD)が規定される文字の最大値になるやうです。事実上、現在のUnicodeは、4byte文字ですので、規定としては妥当ですが、16面最大の0x10FFFFを超えるコードを使用可としてゐる事情が掴めません。何故か、サロゲート・ペアの領域もダイレクトで許可されてゐます。

Unicode (ユニコード)

Unicodeの各領域は、2byteを使用して以下のやうに区分されてゐます。

一往、アルファベット等の表音文字はA領域に、漢字はI領域に、 諺文はO領域に夫々収録されてゐますが、R領域は互換性を維持する目的で使用を限定(Restricted)した文字を収録する為に確保してあるやうです。O領域の内、U+D800〜U+DFFFの領域は、サロゲート・ペアと呼ばれます。当初は、固定長2byteで世界の文字を表現するやうな形態を考へてゐたやうなのですが、サロゲート・ペアの概念の出現で、固定長2byteの文字集合ではなくなつてしまひました。サロゲート・ペアでは、U+D800〜U+DBFFを上位の組、U+DC00〜U+DFFFを下位の組にする事により、合せてU+00000からU+10FFFFの17面の文字の収録が可能になりました。現在は、以下の6面が領域として規定されてゐます。

U+00000~U+0FFFF
0面 "BMP"「基本多言語面」(Basic Multilingual Plane)
U+10000~U+1FFFF
1面 "SMP"「補助多言語面」(Supplementary Multilingual Plane)
U+20000~U+2FFFF
2面 "SIP"「補助漢字面」(Supplementary Ideograph Plane)
U+E0000~U+EFFFF
14面 "SSP"「補助特殊用途面」(Supplementary Special-purpose Plane)
U+F0000~U+10FFFF
15面・16面 「私用領域」(Private Use Area)

現在、Unicodeに収録されてゐる日本語の漢字は、"JIS X 0208"で規定された「第1水準漢字」と「第2水準漢字」と、"JIS X 0212"で規定された「JIS補助漢字」との三種類が在り、夫々の文字集合を合成して部首順に並べ直されてゐます。"JIS X 0213"で新たに規定された「第3水準漢字」や「第4水準漢字」は、2004年の字体改変の影響もあり、まだUnicodeでは正式には収録されてゐません。

Unicodeには、「半角カナ」も65376(0xFF60)から65471(0xFFBF)に収録はされてゐるので利用可能ですが、互換性を考慮して設定した「R領域」に収録されてゐるので、積極的な利用は控へるべきでせう。正規には「全角カタカナ」の利用が推奨されると考へられます。

HTML 4.01

"HTML 4.01"の規格として、"HTML 4.01 Specification"と呼ばれるW3Cの勧告が在ります。W3C(ワールドワイドウェブ・コンソーシアム)と呼ばれる組織がHTML規格として定義した勧告です。其の中に、"20 SGML Declaration of HTML 4"(20 HTML 4のSGML宣言)と呼ばれる章が在り、其処で、"HTML 4.01"で使用できる文字の種類が規定されてゐます。下記に規定を示してみます。

CHARSET
         BASESET  "ISO Registration Number 177//CHARSET
                   ISO/IEC 10646-1:1993 UCS-4 with
                   implementation level 3//ESC 2/5 2/15 4/6"
         DESCSET  0       9       UNUSED
                  9       2       9
                  11      2       UNUSED
                  13      1       13
                  14      18      UNUSED
                  32      95      32
                  127     1       UNUSED
                  128     32      UNUSED
                  160     55136   160
                  55296   2048    UNUSED  -- SURROGATES --
                  57344   1056768 57344

規定された文字コードの最大値は1114111(0x10FFF)ですので、Unicodeの16面の最後の文字まで使用できます。55296(0xD800)から57343(0xDFFF)は、サロゲート・ペアの領域ですが、"HTML 4.01"の規定ではUNUSEDなので使用不可です。

ISO/IEC 15445

"ISO/IEC 15445"は、"ISO/IEC 15445 Hypertext Markup Language"と呼ばれるISOの規格です。"HTML 4.01"をISO規格として再定義してゐます。又、全く同じ規格が日本工業規格の"JIS X 4156"としても定義されてゐます。其の中に、「附属書A (規定) SGML宣言」(Annex A SGML declaration)と呼ばれる章が在り、其処で、"ISO-HTML"で使用できる文字の種類が規定されてゐます。下記に規定を示してみます。

CHARSET
         -- First 17 planes of ISO 10646. --
         BASESET  "ISO Registration Number 177//CHARSET
                   ISO/IEC 10646-1:1993 UCS-4 with
                   implementation level 3//ESC 2/5 2/15 4/6"
         DESCSET  0       9       UNUSED
                  9       2       9
                  11      2       UNUSED
                  13      1       13
                  14      18      UNUSED
                  32      95      32
                  127     1       UNUSED
                  128     32      UNUSED
                  160     55136   160
                  55296   2048    UNUSED
                  57344   1056768 57344

使用できる文字の規定は、事実上、"HTML 4.01"と全く同様です。最大値は、1114111(0x10FFFF)です。サロゲート・ペアの領域は使用不可です。

XML 1.0

"XML 1.0"は、"Extensible Markup Language (XML) 1.0"と呼ばれるW3Cの勧告です。XML文書の書式を規定してゐます。此の勧告は、HTMLとは直接関係はありませんが、"XHTML"のW3C勧告の土臺になつてゐる規定ですので、参考迄に解説しておきます。此の文書の中に、"2.2 Characters"(2.2 文字)と呼ばれる章が在り、其処で、"XML 1.0"で使用できる文字の種類が規定されてゐます。下記に規定を示してみます。

Character Range
[2]    Char    ::=    #x9 | #xA | #xD | [#x20-#xD7FF] | [#xE000-#xFFFD] | [#x10000-#x10FFFF]
/* any Unicode character, excluding the surrogate blocks, FFFE, and FFFF. */
/*  任意のUnicode文字。ただし,サロゲートブロック,FFFE及びFFFFは除く。 */ 

茲では十六進数の数字で使用可能な文字の規定がなされてゐます。制御文字では他のHTMLと同様、#x9の"HT"(水平タブ)と、#xAの"NL"(改行)と、#xDの"CR"(復帰)との三つ丈が使用できる事になつてゐます。ですが、#x20の"SP"(空白)から先は#xD7FF迄使用可なので、#x7F(127)の"DEL"(削除)も使用可になります。どのやうな文字が規定されてゐるのかは知りませんが、[#x80-#x9F]の制御文字(C1)の領域も使用可になつてゐます。[#xD800-#xDFFF]は、サロゲートブロックなので使用不可です。#xFFFEと#xFFFFも使用不可です。最後の#x10FFFF(1114111)は、16面の最後の文字です。

「半角カナ」については、Unicodeの6.8節で定義される互換性文字は使用を避けることが望ましいと明記されてゐるので、XML文書での使用は避けたはうが良いでせう。又、「XMLプロセッサ」は、Shift_JISやEUC-JP等の文字符号化方式が使へてもいいのですが、必ずISO/IEC 10646のUTF-8符号化方式及びUTF-16符号化方式を受け付けなければならないとされてゐます。

CHARACTER SETS

"IANA"の規定に、"CHARACTER SETS"(文字集合)と呼ばれる文書が在ります。世界各国の言語に使用される文字符号化方式の名称を一覧にしてゐます。HTML文書のmeta要素で"charset"に指定する名称も定義されてゐます。此の中から、特に日本語に関聯すると思はれる部分を取出してみたいと思ひます。

Name: ANSI_X3.4-1968                                   [RFC1345,KXS2]
MIBenum: 3
Source: ECMA registry
Alias: iso-ir-6
Alias: ANSI_X3.4-1986
Alias: ISO_646.irv:1991
Alias: ASCII
Alias: ISO646-US
Alias: US-ASCII (preferred MIME name)
Alias: us
Alias: IBM367
Alias: cp367
Alias: csASCII

上記は、一般にASCIIと呼ばれてゐる米国のアルファベットの文字符号化方式を示してゐます。多数の"Alias"の設定から、様々な名称で呼ばれてゐるのが判ります。

Name: ISO-2022-JP  (preferred MIME name)               [RFC1468,Murai]
MIBenum: 39
Source: RFC-1468 (see also RFC-2237)
Alias: csISO2022JP

"ISO-2022-JP"は、"JIS X 0208"と"JIS X 0201"のローマ字部分を使用した日本語用の文字符号化方式です。文字集合の切替へに「エスケープシーケンス」を使用します。テキストデータで7bitしか通さないサーヴァを通過しても文字が変化しない利点があります。「半角カナ」は、元々規定から外されてゐます。HTML文書では、"ISO-2022-JP"と指定します。

ame: JIS_C6226-1983                                     [RFC1345,KXS2]
MIBenum: 63
Source: ECMA registry
Alias: iso-ir-87
Alias: x0208
Alias: JIS_X0208-1983
Alias: csISO87JISX0208

"JIS_X0208-1983"は、JIS規格の文字集合「JIS基本漢字」を規定してゐます。ひらがなや全角のカタカナや漢字など、2byte文字に区点の番号を賦与してゐます。尚、茲に示された"JIS_C6226-1983"の名称は既に廃止されてゐます。

Name: ISO_8859-1:1987                                    [RFC1345,KXS2]
MIBenum: 4
Source: ECMA registry
Alias: iso-ir-100
Alias: ISO_8859-1
Alias: ISO-8859-1 (preferred MIME name)
Alias: latin1
Alias: l1
Alias: IBM819
Alias: CP819
Alias: csISOLatin1

"ISO-8859-1"は、西欧のラテン文字の補助として図形文字(GR)の領域に規定された"latin1"を言ひます。英文のHTML文書では、ASCIIとはせずに、通常"ISO-8859-1"を指定します。

Name: UTF-8                                                    [RFC3629]
MIBenum: 106
Source: RFC 3629
Alias: None

"UTF-8"は、Unicodeの文字符号化方式の一種です。ASCIIは常に1byteで表現できますが、I領域の漢字は3byteで一文字を表現します。此の文字符号化方式は、多言語処理を必要とする際に威力を発揮します。HTML文書では、"UTF-8"と指定します。

Name: Shift_JIS  (preferred MIME name)
MIBenum: 17
Source: This charset is an extension of csHalfWidthKatakana by
        adding graphic characters in JIS X 0208.  The CCS's are
        JIS X0201:1997 and JIS X0208:1997.  The
        complete definition is shown in Appendix 1 of JIS
        X0208:1997.
        This charset can be used for the top-level media type "text".
Alias: MS_Kanji 
Alias: csShiftJIS

"Shift_JIS"は、"JIS X 0201"(JISローマ字カナ)の空き領域に"JIS X 0208"で規定する2byte文字を埋め込んだ文字符号化方式を言ひます。"JIS X 0201"で規定された、ローマ字や「半角カナ」は1byteで表現できるのですが、"JIS X 0208"で規定された文字は全て2byteで表現されます。エスケープシーケンスを全く使用しないのが特徴です。HTML文書では、"Shift_JIS"と指定します。"x-sjis"は、暫定的に使用されてゐた古い指定なので、現在は使はれません。

Name: Extended_UNIX_Code_Packed_Format_for_Japanese
MIBenum: 18
Source: Standardized by OSF, UNIX International, and UNIX Systems
        Laboratories Pacific.  Uses ISO 2022 rules to select
               code set 0: US-ASCII (a single 7-bit byte set)
               code set 1: JIS X0208-1990 (a double 8-bit byte set)
                           restricted to A0-FF in both bytes
               code set 2: Half Width Katakana (a single 7-bit byte set)
                           requiring SS2 as the character prefix
               code set 3: JIS X0212-1990 (a double 7-bit byte set)
                           restricted to A0-FF in both bytes
                           requiring SS3 as the character prefix
Alias: csEUCPkdFmtJapanese
Alias: EUC-JP  (preferred MIME name)

"EUC-JP"は、先頭ビットが0の時はASCII、先頭ビットが1の時は、"JIS X 0208"になる8bitの文字符号化方式です。「半角カナ」は、制御文字(SS2)を含めて、2byteで表現されます。一往、「JIS補助漢字」の呼出しも出来るやうになつてゐます。HTML文書では、"EUC-JP"と指定します。

RFC1468

"RFC1468"は、"Japanese Character Encoding for Internet Messages"と呼ばれるRFC文書です。"ISO-2022-JP"の規格を定義してゐます。"ISO-2022-JP"では、ロッキングシフトと呼ばれる文字集合の切替へ方式が採用されてゐます。"ISO-2022-JP"の規格では、文字集合の切替への為のエスケープシーケンス(Esc Seq)の種類が規定されてゐるので、下記に規定を示してみます。

       Esc Seq    Character Set                  ISOREG

       ESC ( B    ASCII                             6
       ESC ( J    JIS X 0201-1976 ("Roman" set)    14
       ESC $ @    JIS X 0208-1978                  42
       ESC $ B    JIS X 0208-1983                  87

上記の規定では、"ESC ( B"[1B+28+42]以降はASCIIの文字列として、又、"ESC $ B"[1B+24+42]以降は2byteの"JIS X 0208-1983"(83JIS)の文字列として認識するやうになつてゐます。更に、古い規定も残つてをり、"ESC ( J"[1B+28+4A]以降は、"JIS X 0201-1976"(JISローマ字)の文字列として、又、"ESC $ @"[1B+24+40]以降は2byteの"JIS X 0208-1978"(78JIS)の文字列として認識するやうになつてゐます。

其の外、あまり一般的ではないのですが、様々なエスケープシーケンスが使用されてゐるやうです。以下は一例ですが、「半角カナ」のエスケープシーケンスは正規の規定ではありませんので、文字化けの原因になる可能性が高いと考へられます。場合に依つては、プログラムの誤動作を引き起すかも知れません。

文字自体は、0x21から0x7Eの間の94文字分を、図形文字(GL)の領域のみで使用します。エスケープシーケンスの出現で文字集合の切替へが行はれます。ASCIIの場合は、1文字当り1byte分消費しますが、「JIS基本漢字」(83JIS)や「JIS補助漢字」の場合は、1文字当り2byte分消費します。

此の文字集合は、HTML文書としても使用できるのですが、"ESC"の制御文字はHTML文書としての制御文字ではなく、飽く迄も文字コード用の制御文字として利用されてゐるのだと認識されます。

EUC-JP

"EUC-JP"での文字集合の判別は、8bitの列の先頭ビットの0/1で決定されます。先頭ビットが"0"の時は、ASCIIとして扱はれ、先頭ビットが"1"の時は、「JIS基本漢字」(90JIS)として扱はれます。従つて、ASCIIは図形文字(GL)の領域を使用し、「JIS基本漢字」は必然的に図形文字(GR)の領域を使用する事になります。漢字とローマ字の間は之丈で判別が出来ます。更に現在の規定では、"SS2"や"SS3"などの特殊な制御文字で一文字分の呼出しをする事も出来るやうになりました。

EUCのコードセットには、以下の四種類が在ります。

EUCコードセット0 (US-ASCII)
図形文字(GL)の領域に定義されてゐる(0x20-0x7E)
EUCコードセット1 (JIS X0208-1990)「JIS基本漢字」
図形文字(GR)の領域に定義されてゐる(0xA1A1-0xFEFE)
EUCコードセット2 「半角カタカナ」
中間バッファ(G2)から制御文字"SS2"(0x8E)で図形文字(GR)の領域に呼出し(0x8EA1-0x8EDF)
EUCコードセット3 (JIS X0212-1990)「JIS補助漢字」
中間バッファ(G3)から制御文字"SS3"(0x8F)で図形文字(GR)の領域に呼出し(0x8FA1A1-0x8FFEFE)

制御文字の"SS2"や"SS3"を使用した場合、シングルシフトとして1文字分のみ臨時に呼出されます。「半角カナ」を連続して書く場合、一文字一文字に制御文字(SS2)が附属します。詰り、「半角カナ」も正規の文字規定に組込まれてゐる訣なのです。

"EUC-JP"の場合は、基本は先頭ビットでASCIIか「JIS基本漢字」かを判別し、必要に応じて「半角カナ」や「JIS補助漢字」を制御文字で呼出す形式になつてゐます。ASCIIの場合は、1文字当り1byte消費しますが、「JIS基本漢字」(90JIS)の場合は、1文字当り2byte分消費します。又、「半角カナ」は、制御文字(SS2)を含めて1文字当り2byte消費し、「JIS補助漢字」は、制御文字(SS3)を含めて1文字当り3byte消費する計算になります。

Shift_JIS

"Shift_JIS"は、"JIS X 0201"「JISローマ字カナ」を土臺として其の空き領域に"JIS X 0208"「JIS基本漢字」の文字集合を埋め込む形式になつてゐます。土臺は8bitの文字符号化方式ですので、図形文字(GL)の領域には「JISローマ字」が、図形文字(GR)の領域には「半角カナ」が、夫々固定して定義されてゐます。

「JIS基本漢字」については、「JISローマ字カナ」の空き領域を使用しますので、1byte目に使用できる部分は限られて来ます。先づ、制御文字(C1)の領域の0x80から0x9F迄、次に、図形文字(GR)で未使用の0xA0と0xE0から0xFFが使用可能と考へられさうです。実際の"Shift_JIS"では、0x81から0x9Fと0xE0から0xEFとを使用して、1区から94区迄の文字を埋め込んでゐます。又、0xF0から0xFC迄を95区から120区として特別に設定して独自の文字を埋め込んでゐます。

0x20~0x7E 図形文字(GL)の領域
「JISローマ字」"JIS X 0201"
0x7F 図形文字(GL)の領域
制御文字 "DEL" (削除)
0x81~0x9F 制御文字(C1)の領域
「JIS基本漢字」 1区から62区の1byte目
0xA1~0xDF 図形文字(GR)の領域
「半角カナ」"JIS X 0201"
0xE0~0xEF 図形文字(GR)の領域
「JIS基本漢字」 63区から94区の1byte目
0xF0~0xFC 図形文字(GR)の領域
「Shift_JISの拡張文字」 95区から120区の1byte目

2byte目は、1区や3区などの奇数区には0x40から0x7Eと0x80から0x9Eとを使用し、2区や4区などの偶数区には0x9Fから0xFCを使用してゐます。2byte目は、ローマ字や「半角カナ」に完全に重なるのですが、唯一、制御文字の"DEL"(0x7F)には避けるやうにしたやうです。

0x40~0x7E 図形文字(GL)の領域
奇数区(1,3,5,…,119区)の2byte目で1点から63点迄
0x7F 図形文字(GL)の領域
制御文字 "DEL" (削除)
0x80~0x9E 制御文字(C1)の領域
奇数区(1,3,5,…,119区)の2byte目で64点から94点迄
0x9F 制御文字(C1)の領域
偶数区(2,4,6,…,120区)の2byte目で1点のみ
0xA0~0xFC 図形文字(GR)の領域
偶数区(2,4,6,…,120区)の2byte目で2点から94点迄

1byte目は、「JISローマ字カナ」では使用されてゐない部分を使用してゐるので、1byte目のコード番号で「JISローマ字カナ」なのか、「JIS基本漢字」なのかが判別できる事になります。1byte目が「JIS基本漢字」用のコードであれば、2byte目が到達した時点で文字が確定します。「JISローマ字」(ASCII)の場合は、1文字当り1byte消費しますが、「JIS基本漢字」の場合は、1文字当り2byte分消費します。又、「半角カナ」は、"JIS X 0201"の規定其の侭ですから、1文字当り1byte消費で済みます。「JIS補助漢字」は使用できません。エスケープシーケンスも、シングルシフトもありません。

「半角カナ」は、初期段階で使用は可能にはなつてゐますが、Unicodeでは同じコードポイントに"Latin1"が設定されてしまつてゐますので、コード番号で衝突してしまつてゐます。「半角カナ」で書いた文書を"Latin1"で読出して文字化けになる事は容易に想像がつきます。過去の文書の互換性を重視した点は評価できますが、「全角カタカナ」が在るのですから、其れを使ふのが妥当だと思ひます。

RFC3629

"RFC3629"は、"UTF-8, a transformation format of ISO 10646"と呼ばれるRFC文書です。Unicodeの文字符号化方式"UTF-8"の規格を定義してゐます。"UTF-8"では、可変長の多バイト符号化を行つてゐますので、領域によつて一文字当りのバイト数が変化します。下記に規定を示してみます。

   Char. number range  |        UTF-8 octet sequence
      (hexadecimal)    |              (binary)
   --------------------+---------------------------------------------
   0000 0000-0000 007F | 0xxxxxxx
   0000 0080-0000 07FF | 110xxxxx 10xxxxxx
   0000 0800-0000 FFFF | 1110xxxx 10xxxxxx 10xxxxxx
   0001 0000-0010 FFFF | 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx

"UTF-8"では、Unicodeの番号を一旦、二進数に換算し、下の桁から6bitづつ区切つてから、0x80や0xC0や0xE0や0xF0など定まつた数字を加へて符号化します。U+0000〜U+007Fは、ASCIIの領域です。"UTF-8"でもASCIIは1byteで表現されます。U+0080〜U+07FFは、「A領域」の亜剌比亜文字迄です。2byteで表現されます。U+0800〜U+FFFFは、3byteで表現されます。「I領域」の漢字や「O領域」の諺文は、茲に這入ります。以上が、"BMP"と呼ばれる「基本多言語面」の符号化です。其の他、1面から16面に収容された文字は、全て4byteで表現されます。消費バイト数と代表的な文字の種類とを一覧にしておきます。因みに、「半角カナ」は「R領域」に収録されてゐますので、3byte消費する計算になります。

1byte (U+0000~U+007F)
ASCII
2byte (U+0080~U+07FF)
Latin1, 希臘文字、キリル文字、アルメニア文字、希伯来文字、亜剌比亜文字
3byte (U+0800~U+FFFF)
残りの「A領域」、漢字、仮名、諺文、「半角カナ」
4byte (U+10000~U+10FFFF)
SMP(1面), SIP(2面), SSP(14面), 私用領域(15,16面)

HTML文書と「半角カナ」

以上を踏まへて「半角カナ」の事を考へると、文字コードとしては、特殊な扱ひをされてゐる事が判ります。"ISO-2022-JP"の場合は、元から考慮されてゐませんし、"EUC-JP"の場合は、シングルシフトの扱ひです。"Shift_JIS"の場合は、「半角カナ」の互換性を重視した結果、文字コードの拡張が困難になりました。

Unicodeでは、「半角カナ」は「R領域」に収録された為、文字としての使用は推奨されませんが、コードポイントは賦与されてしまつてゐますので、使はうと思へば使へる文字です。

HTML文書としては、"HTML 2.0"は、元々ASCIIと"Latin1"しか使用できませんので、「半角カナ」は愚か、漢字も全角仮名も使用できません。"HTML 2.0"で日本語を使ふとしたら、羅馬字を使ふしかないでせう。国際化された"HTML i18n"で初めて漢字と仮名が使へるやうになりました。文字集合の規定は、"ISO/IEC 10646"が土臺になつてゐますから、当然ですが「半角カナ」の使用は推奨されません。勿論、"ISO-2022-JP"で符号化されたHTML文書では、「半角カナ」は使用禁止です。結果的に、「HTML文書では半角カナは使へるが、其の使用は推奨されない」と理解したはうがよいと考へられます。

HTML文書と正字

日本語表記で認められてゐるJIS規格は、以下の通りです。

"JIS X 0201"
「JISローマ字カナ」 羅馬字、半角カナ
"JIS X 0208"
「JIS基本漢字」 ひらがな、全角カタカナ、第1水準漢字、第2水準漢字
"JIS X 0212"
「JIS補助漢字」
"JIS X 0213"
第3水準漢字、第4水準漢字

漢字の規定としては、第1水準漢字、第2水準漢字、第3水準漢字、第4水準漢字、補助漢字が在ります。Unicodeは、「JIS基本漢字」と「JIS補助漢字」とを収録した文字集合ですので、其の他の漢字が収録されてゐたとしたら、其の文字は、支那か臺湾か朝鮮の文字コードが元になつてゐる筈です。「第3水準漢字」と「第4水準漢字」との場合、まだ正式にUnicodeには収録されてゐない筈ですから、"ISO/IEC 10646"(Unicode)で使用可能な文字を規定してゐるHTML文書では使用は出来ません。

次に、文字符号化方式の観点から考へてみます。"ISO-2022-JP"では、ASCIIと「JIS基本漢字」をエスケープシーケンスを用ゐたロッキングシフトで切替へ乍、表現します。"EUC-JP"では、先頭ビットが"0"か"1"かでASCIIか「JIS基本漢字」かを判別します。"Shift_JIS"では、「JISローマ字カナ」の未使用部分の出現が「JIS基本漢字」の呼出しの合図になります。全て、ASCIIと「JIS基本漢字」を区別する為に考へ出された符号化の方法です。「JIS基本漢字」には「第1水準漢字」と「第2水準漢字」との漢字が収録されてゐます。基本的には、茲から使へる漢字を選ぶ必要があります。

"Shift_JIS"には、「Shift_JISの拡張文字」が存在します。之等に収録された文字は、ベンダの独自拡張で設定された文字ですので、JIS規格には規定されてはゐません。情報交換用の文字としては使用不可となります。

Unicodeでは、「JIS基本漢字」に加へ「JIS補助漢字」も使用できます。"UTF-8"の文字符号化方式を使用した場合は、「JIS補助漢字」も使用可能になります。然し乍、其れ以外の漢字は、日本語表記としては使用は推奨されません。フォントが対応してゐない場合がありますし、場合によつては文字化けを引き起します。

結果的に、「日本語でHTML文書を作成する場合は、第1水準漢字か第2水準漢字から選ぶのを基本とし、Unicodeを使用するにしても、JIS基本漢字やJIS補助漢字から逸脱した漢字は選ばないやうにしなければならない」事になります。Unicodeに収録されてゐるからと言つて安易に正字体の漢字を使用するのは、控へたはうが無難です。

規格外文字使用の弊害

Level 1
表示出来ない文字が"SP"(空白)か中黒に変化して表示される場合があります。其の文字位置に何らかの文字が在る事を豫期させるので、弊害としては低い部類になります。
Level 2
表示出来ない文字を無視して次の文字を表示してしまふ場合があります。使用するソフトウェアに依つては、表示できない文字の処理をスルーしてしまふ事も考へられます。スルーされた文字の位置は容易に豫期できない分、弊害が大きいと思ひます。
Level 3
表示しようとした文字とは別の文字を表示してしまふ場合があります。規格として定義された文字ならば、此のやうな事は無いと思ひますが、私用領域などを利用した場合は、通信の送り手と受け手で同じ定義を使用しないと文字が入れ換る場合があります。日本語だと比較的に気が附き易いかも知れませんが、漢文なんかだと気が附かない場合があります。
Level 4
表示できない文字以降が文字化けを起す場合があります。"ISO-2022-JP"の場合、文字列の途中に読取り不可能なコードが出現したら、其れ以降の文字の表示が崩れてしまふ場合があります。次のエスケープシーケンスが出て来る迄、文字化けが続き、解読不可能になります。
Level 5 "Danger"
最もやばい状態として表示できない文字のコードを受信した結果、ソフトウェアが異常な動作を引き起す場合もあります。ソフトウェアの動作停止や、表示拒否など、最悪は、基本ソフトごとダウンしてしまふ場合も想定されます。

自分の所で表示が出来たからと言つて、相手も同じやうに表示できるとは限りません。幾ら正字を表示させたいからと言つても、無茶な事丈は控へたいものです。

蛇足ですが、本当に正字に拘りたいのであれば、韓国の文字コード(EUC-KR)で日本語のHTML文書を作成される事をお薦めします。餘計な国字改革が行はれなかつた分、正字が其の侭の残されてゐますし、仮名文字も確りと定義されてあります。

参考資料

関聯頁

トップページ
詞の玉垣
SEO [PR] 爆速!無料ブログ 無料ホームページ開設 無料ライブ放送