資料

Unicode版msearchの多言語対応機能を活用するために必要な言語コード表、 文字コード(エンコーディング)の表、およびその他の資料です。

目次

言語コード表

RFC-1766("Tags for the Identification of Languages")準拠の言語コード表です。HTMLのタグで言語を指定する時に使います。 RFC-1766はOBSOLETEされているので、RFC-3066("Tags for the Identification of Languages")、RFC-3282("Content Language Headers")も参照してください。

HTMLのタグでの言語指定のサンプルを以下に記します。(色付き箇所が言語コード)

<meta http-equiv="Content-Language" content="ja">
<html lang="ja">

言語コードの定義を以下に記します。(RFC-1766, RFC-3066の内容の抜粋です。)

  1. 記法は Primary-subtag *( "-" Subtag ) である。括弧内は省略してもよいし、1以上の任意の回数繰り返してもよい。
  2. いずれのsubtagも、アルファベットの大文字・小文字は区別されない。
  3. Primary-subtagはアルファベットのみで記述される。
  4. 2番目以降のsubtagはアルファベットと数字で記述される。
  5. Primary-subtagに出現するアルファベット2文字はISO639の言語コードとみなされる。
  6. Primary-subtagに出現するアルファベット3文字はISO639-2の言語コードとみなされる。
  7. Primary-subtagの"i"と"x"は特別な意味を持つ。
  8. 2番目のsubtagに出現するアルファベット2文字はISO3166の国コードとみなされる。
  9. (Primary-subtagを含めて)2つ以上のsubtagで構成される言語コードで、2番目のsubtagの文字数が3から8のものについてはIANAへの登録が必要である。

<meta>タグでContent-Languageの値として言語コードを記述する時の規則を以下に記します。(RFC-3282の内容の抜粋です。)

  1. 言語コードは1つのみでもよいし、カンマで区切って任意回数繰り返してもよい。
以下、サンプルを示します。
<meta http-equiv="Content-Language" content="ja">
<meta http-equiv="Content-Language" content="ja,sv">
<meta http-equiv="Content-Language" content="ja-JP,sv-SE">

言語コード表を以下に記します。 有無の欄に○が記載されているのは、当サイトでテストページが用意してあり、検索テストができる言語です。 なおWebブラウザがすべての言語コードに対応しているとは限らないので注意してください。 言語コードへの対応状況はWebブラウザによってまちまちです。

以下の表から目的の言語を探すには、ブラウザのページ内検索を使ってください。 ひとつの言語に複数の言語名が与えられている場合があり、 あいうえお順に出現するとは限りません。

有無言語コード日本語での呼称英語での呼称
ja 日本語 Japanese
  ja-JP 日本語 Japanese
  art-lojban Lojban語(人工語) Lojban
  is アイスランド語 Icelandic
  is-IS アイスランド語 - アイスランド Icelandic - Iceland
    アイヌ語 - ISO639には未登録らしい Ainu
  ay アイマラ語 Aymara
  ga アイルランド語 Irish
  ga-IE アイルランド語 Irish Gaelic
  ast-ES アストゥリアス語 Asturian
  az アゼルバイジャン語 Azerbaijani
  az-AZ アゼルバイジャン語 - アゼルバイジャン Azerbaijani - Azerbaijan
  az-Arab アゼルバイジャン語 - アラビア文字 Azerbaijani in Arabic script
  az-AZ-Cyrl アゼルバイジャン語 - キリル文字 Azerbaijani - Cyrillic
  az-Cyrl アゼルバイジャン語 - キリル文字 Azerbaijani in Cyrillic script
  az-AZ-Latn アゼルバイジャン語 - ラテン文字 Azerbaijani - Latin
  az-Latn アゼルバイジャン語 - ラテン文字 Azerbaijani in Latin script
  as アッサム語 Assamese
  aa アファル語 Afar
  ab アブハジア語 Abkhazian
  af アフリカーンス語 Afrikaans
  af-ZA アフリカーンス語 - 南アフリカ Afrikaans - South Africa
  am アムハラ語 Amharic
  an アラゴン語 Aragonese
  ar アラビア語 Arabic
  ar-AE アラビア語 - アラブ首長国連邦 Arabic - United Arab Emirates
  ar-DZ アラビア語 - アルジェリア Arabic - Algeria
  ar-YE アラビア語 - イエメン Arabic - Yemen
  ar-IQ アラビア語 - イラク Arabic - Iraq
  ar-EG アラビア語 - エジプト Arabic - Egypt
  ar-OM アラビア語 - オマーン Arabic - Oman
  ar-QA アラビア語 - カタール Arabic - Qatar
  ar-KW アラビア語 - クウェート Arabic - Kuwait
  ar-SA アラビア語 - サウジアラビア Arabic - Saudi Arabia
  ar-SY アラビア語 - シリア Arabic - Syrian Arab Republic
  ar-TN アラビア語 - チュニジア Arabic - Tunisia
  ar-BH アラビア語 - バーレーン Arabic - Bahrain
  ar-MA アラビア語 - モロッコ Arabic - Morocco
  ar-JO アラビア語 - ヨルダン Arabic - Jordan
  ar-LY アラビア語 - リビア Arabic - Libyan Arab Jamahiriya
  ar-LB アラビア語 - レバノン Arabic - Lebanon
  ar-LB アラビア語 - レバノン Arabic - Lebanon
  als アルザス語 - ISO639-2に見当たらない Alsace
  sq アルバニア語 Albanian
  sq-AL アルバニア語 - アルバニア Albanian - Albania
  hy アルメニア語 Armenian
  hy-AM アルメニア語 - アルメニア Armenian - Armenia
  it イタリア語 Italian
  it-IT イタリア語 - イタリア Italian - Italy
  it-CH イタリア語 - スイス Italian - Switzerland
  yi イディッシュ語 Yiddish
  yi-latn イディッシュ語 - ラテン文字 Yiddish in Latin script
  iu イヌイット語 Inuktitut
  ik イヌピア語 Inupiaq
  ig イボ語(ナイジェリア) Igbo(Nigeria)
  ilo-PH イロコ語, イロカノ語(フィリピン)。ルソン島北部 Iloco, ilocano(Philippines)
  iba イバン語 Iban
  hil-PH イロンゴ語, ヒリガイノン語(フィリピン)。パナイ島, ネグロス島 Ilonggo, Hiligaynon(Philippines)
  ia インターリングア(国際語) Interlingua (International Auxiliary Language Association)
  ie インターリンガ語 Interlingue
  id インドネシア語 Indonesian
  id-ID インドネシア語 - インドネシア Indonesian - Indonesia
  ug ウィグル語(ウイグル語) Uighur(新疆ウイグル自治区)
  cy ウェールズ語 Welsh
  cy-GB ウェールズ語 Welsh(ウェールズ語でCymraeg)
  wo ウォロフ語(ガンビア, セネガル) Wolof(Gambia, Senegal)
  uk ウクライナ語 Ukrainian
  uk-UA ウクライナ語 - ウクライナ Ukrainian - Ukraine
  uz ウズベク語 Uzbek
  uz-Cyrl ウズベク語(キリル文字) Uzbek in Cyrillic script
  uz-UZ-Cyrl ウズベク語(キリル文字) - ウズベキスタン Uzbek(Cyrillic) - Uzbekistan
  uz-Latn ウズベク語(ラテン文字) Uzbek in Latin script
  uz-UZ-Latn ウズベク語(ラテン文字) - ウズベキスタン Uzbek(Latin) - Uzbekistan
  ur ウルドゥー語 Urdu
  ur-PK ウルドゥー語 - パキスタン Urdu - Pakistan
  et エストニア語 Estonian
  et-EE エストニア語 - エストニア Estonian - Estonia
  eo エスペラント語 Esperanto
  oc オキタン語 Occitan
  os オセット語 Ossetian;Ossetic
  oc オック語 Occitan
  nl オランダ語 Flemish; Dutch
  nl-NL オランダ語 - オランダ Flemish; Dutch - Netherlands
  nl-BE オランダ語 - ベルギー Flemish; Dutch - Belgium
  or オリヤー語 Oriya
  om オロモ語 Oromo
  kaw カウィ語 Kawi
  kk カザフ語 Kazakh
  kk-KZ カザフ語 - カザフスタン Kazakh - Kazakhstan
  ks カシミール語 Kashmiri
  ca カタロニア語 Catalan; Valencian
  ca-ES カタロニア語 - スペイン Catalan; Valencian - Spain
  val-ca-ES Valencian語 Valencian
  gay ガヨ語 Gayo
  gl ガリシア語 Gallegan(Galician)
  gl-ES ガリシア語 - スペイン・ガリシア地方 Gallegan(Galician) - Galicia
  kn カンナダ語 Kannada
  kn-IN カンナダ語 - インド Kannada - India
  km カンボジア語(クメール語) Cambodian(Khmer)
  el ギリシャ語 Greek
  el-GR ギリシャ語 - ギリシャ Greek - Greece
  gil キリバス語 - キリバス共和国 Gilbertese(Kiribati) - Kiribati
  ky キルギス語 Kirghiz
  ky-KZ キルギス語 - カザフスタン Kirghiz - Kazakhstan
  rn キルンジ語(キルンディ語) - ブルンジ共和国 Rundi(Kirundi) - Burundi
  rw キンヤルワンダ語 Kinyarwanda
  gn グアラニー語 Guarani
  gu グジャラート語 Gujarati
  gu-IN グジャラート語 - インド Gujarati - India
  km クメール語 Khmer
  kl グリーンランド語 Greenlandic
    クリンゴン語 - ISO639では未定義らしい Klingon
  ka グルジア語 Georgian
  ka-GE グルジア語 - グルジア共和国 Georgian - Georgia
  ku クルド語 Kurdish
  crp クレオール語 Creoles and pidgins
  ht クレオール語(ハイチ共和国)。セイシェル共和国, ハイチ共和国, モーリシャス Creole - Haiti / Seychelles, Haiti, Mauritius
  cpe-MU クレオール語(英語) - モーリシャス Creoles and pidgins - Mauritius
  cpf-MU クレオール語(フランス語) - モーリシャス Creoles and pidgins - Mauritius
  hr クロアチア語 Croatian
  hr-HR クロアチア語 - クロアチア Croatian - Croatia
  qu ケチュア語 Quechua
  gd ゲール語(スコットランド) Gaelic; Scottish Gaelic
  gd-GB ゲール語(英国) Gaelic; Scottish Gaelic
  cel ケルト語 Celtic
  xh コーサ語 Xhosa
  xh-ZA コーサ語 Xhosa
  cel-gaulish ゴール語 Gaulish
  kw コーンウォール語 Cornish
  kw-GB コーンウォール語 Cornish
  kv コミ語 Komi
  co コルシカ語 Corsican
  kok コンカニ語 Konkani
  kok-IN コンカニ語 - インド Konkani - India
  smi サーメ語(サーミ語, ラップ語) Sami(Lappish)
  sm サモア語 Samoan
  se サモス語 Northern Sami
  sc サルド語 Sardinian
  srd-IT サルド語 Sardinian Campidanesu
  sg サンゴ語(サングホ語) - 中央アフリカ Sango - Central African Republic
  sa サンスクリット語(梵語) Sanskrit
  sa-IN サンスクリット語 - インド Sanskrit - India
  ss シスワティ語 Swati(Siswati)
  ss-ZA シスワティ語 Swati(Siswati)
  jv ジャワ語 Javanese
  sn ショナ語 - ジンバブエ共和国 Shona - Zimbabwe
  syr シリア語 Syriac
  syr-SY シリア語 - シリア Syriac - Syrian Arab Republic
  sd シンド語 Sindhi
  si シンハラ語 Sinhalese
sv スウェーデン語 Swedish
  sv-SE スウェーデン語 - スウェーデン Swedish - Sweden
  sv-FI スウェーデン語 - フィンランド Swedish - Finland
    スコーネ語(スコンスカ)。ISO639-2のgemを使うらしい。(Germanic (Other))。スウェーデン・スコーネ地方の方言。sv-DKもしくはda-SEとでも書きたい気分 Skåne(Skånska)
  su スーダン語 Sundanese
  zu ズールー語 Zulu
  zu-ZA ズールー語 Zulu
  sx スツ語 - ISO639-1に見当たらない Sutu
  es スペイン語 Castilian; Spanish
  es-US スペイン語 - 米国 Castilian; Spanish - United States
  es-AR スペイン語 - アルゼンチン Castilian; Spanish - Argentina
  es-UY スペイン語 - ウルグアイ Castilian; Spanish - Uruguay
  es-EC スペイン語 - エクアドル Castilian; Spanish - Ecuador
  es-SV スペイン語 - エルサルバドル Castilian; Spanish - EL Salvador
  es-GT スペイン語 - グアテマラ Castilian; Spanish - Guatemala
  es-CR スペイン語 - コスタリカ Castilian; Spanish - Costa Rica
  es-CO スペイン語 - コロンビア Castilian; Spanish - Colombia
  es-ES スペイン語 - スペイン Castilian; Spanish - Spain
  es-CL スペイン語 - チリ Castilian; Spanish - Chile
  es-DO スペイン語 - ドミニカ共和国 Castilian; Spanish - Dominican Republic
  es-NI スペイン語 - ニカラグア Castilian; Spanish - Nicaragua
  es-PA スペイン語 - パナマ Castilian; Spanish - Panama
  es-PY スペイン語 - パラグアイ Castilian; Spanish - Paraguay
  es-PR スペイン語 - プエルトリコ Castilian; Spanish - Puerto Rico
  es-VE スペイン語 - ベネズエラ Castilian; Spanish - Venezuela
  es-PE スペイン語 - ペルー Castilian; Spanish - Peru
  es-BO スペイン語 - ボリビア Castilian; Spanish - Bolivia
  es-HN スペイン語 - ホンジュラス Castilian; Spanish - Honduras
  es-MX スペイン語 - メキシコ Castilian; Spanish - Mexico
  sk スロバキア語 Slovak
  sk-SK スロバキア語 - スロバキア Slovak - Slovakia
  asz-sk-SK 東スロバキア語 - ISO639-2にasz見当たらない Eastern Slovak
  sl スロベニア語 Slovenian
  sl-SI スロベニア語 - スロベニア Slovenian - Slovenia
  sl-rozaj Resian, Resianic, Rezijan Resian, Resianic, Rezijan
  sw スワヒリ語。ウガンダ共和国, ケニア共和国, タンザニア連合共和国 Swahili / Uganda, Kenya, Tanzania
  sw-KE スワヒリ語 - ケニア Swahili - Kenya
  sw-TZ スワヒリ語 - タンザニア Swahili - United Republic Of Tanzania
  ceb-PH セブアノ語(フィリピン)。セブ島, ボホール島, ネグロス島東部, レイテ島南西部, ミンダナオ島北東部 Cebuano(Philippines)
    セラノ語(インド) - ISO639-1には未登録らしい Serrano(India)
  sr セルビア語 Serbian
  sr-Cyrl セルビア語(キリル文字) Serbian in Cyrillic script
  sr-SP-Cyrl セルビア語(キリル文字) - セルビア。セルビアのISO3166国コードはCS Serbian(Cyrillic) - Serbia And Montenegro
  sr-Latn セルビア語(ラテン文字) Serbian in Latin script
  sr-SP-Latn セルビア語(ラテン文字) - セルビア。セルビアのISO3166国コードはCS Serbian(Latin) - Serbia And Montenegro
  sh セルボ・クロアチア語 Serbo-Croatian
  nso-ZA ソト語(北部) Sotho(Northern)
  st ソト語(南部) Sotho(Southern)
  so ソマリ語 Somali
  sb ソルビア語。ISO639-1に見当たらない Sorbian
  wen-DE ソルビア語 Sorbian
  ae ゾロアスター語 Avestan
  dz ゾンカ語 - ブータン Dzongkha - Bhutan
  th タイ語 Thai
  th-TH タイ語 - タイ Thai - Thailand
  phi タウスグ語(フィリピン)。ミンダナオ島南端のスルー諸島, スル州, ホロ島周辺 Tausug, Tausog(Philippines)
  tl タガログ語, フィリピノ語, フィリピン語 Tagalog, Filipino, Pilipino
  tl-PH タガログ語, フィリピノ語(フィリピン) Tagalog, Filipino, Pilipino(Philippines)
  tg タジク語 Tajik
  tt タタール語 Tatar
  tt-RU タタール語 - ロシア Tatar - Russian Federation
  ta タミール語 Tamil
  ta-IN タミール語 - インド Tamil - India
  ta-MY タミール語 - マレーシア Tamil - Malaysia
  ira ダリ語。アフガニスタン。ISO639には未登録らしい Dari
  cs チェコ語 Czech
  cs-CZ チェコ語 - チェコ共和国 Czech - Czech Republic
  cu チェコスロバキア語 Slavonic
  ce チェチェン語 Chechen
    チェロキー語。ISO639-1には未登録らしい Cherokee
  bo チベット語 Tibetan
  crp-PH チャバカノ語(フィリピン)。スペイン語との混成語(クレオール語)。サンボアンガ市, コタバト市, カビテ市 Chavacano, Chabakano(Philippines) / Creole, Spanish based language.
  ch チャモ口語 Chamorro
  cv チューバシュ語 Chuvash
  ts ツォンガ語 Tsonga
  tn ツワナ語(セツワナ語) Tswana
  tn-ZA ツワナ語(セツワナ語) Tswana
  div ディヴェヒ語。ISO639-1でdvも定義されてる Divehi(Dhivehi)
  div-MV ディヴェヒ語 - モルジブ Divehi(Dhivehi) - Maldives
  ti ティグリニャ語 Tigrinya
  te テルグ語 Telugu
  te-IN テルグ語 - インド Telugu - India
  da デンマーク語 Danish
  da-DK デンマーク語 - デンマーク Danish - Denmark
  de ドイツ語 German
  de-1901 ドイツ語 German, traditional orthography
  de-1996 ドイツ語 German, orthography of 1996
  de-AT ドイツ語 - オーストリア German - Austria
  de-AT-1901 ドイツ語 - オーストリア German, Austrian variant, traditional orthography
  de-AT-1996 ドイツ語 - オーストリア German, Austrian variant, orthography of 1996
  de-CH ドイツ語 - スイス German - Switzerland
  de-CH-1901 ドイツ語 - スイス German, Swiss variant, traditional orthography
  de-CH-1996 ドイツ語 - スイス German, Swiss variant, orthography of 1996
  de-DE ドイツ語 - ドイツ German - Germany
  de-DE-1901 ドイツ語 - ドイツ German, German variant, traditional orthography
  de-DE-1996 ドイツ語 - ドイツ German, German variant, orthography of 1996
  de-LI ドイツ語 - リヒテンシュタイン German - Liechtenstein
  de-LU ドイツ語 - ルクセンブルグ German - Luxembourg
  nds 低ザクセン語 Low Saxon
  tw トウィ語 Twi
  ng ドゥンガ語 Ndonga
  tk トルクメン語 Turkmen
  tr トルコ語 Turkish
  tr-TR トルコ語 - トルコ Turkish - Turkey
  to トンガ語 Tonga
  na ナウル語 Nauru
  nv ナバホー語 Navajo; Navaho
  ny ニャンジャ語 Nyanja; Chichewa; Chewa
  ne ネパール語(インド) Nepali
  no ノルウェー語 Norwegian
  nn ノルウェー語(ニーノシク) Norwegian Nynorsk
  nn-no ノルウェー語(ニーノシク) Norwegian Nynorsk
  no-nyn ノルウェー語(ニーノシク) Norwegian Nynorsk
  nb ノルウェー語(ブークモール) Norwegian Bokmål
  nb-no ノルウェー語(ブークモール) Norwegian Bokmål
  no-bok ノルウェー語(ブークモール) Norwegian Bokmål
  pi パーリ語 Pali
  ha ハウサ語。ナイジェリア連邦共和国, ニジェール共和国 Hausa / Nigeria, Niger
  ba バシキール語 Bashkir
  ba-RU バシキール語 Bashkir
  ps パシュトゥ語 Pushto
  eu バスク語 Basque
  eu-ES バスク語 Basque
  ban バリ語 Balinese
  haw ハワイ語。ISO639-1には未登録らしい Hawaiian
  pag パンガシナン語(フィリピン)。ルソン島中部パンガシナン州 Pangasinan(Philippines)
  hu ハンガリー語(マジャール語) Hungarian(Magyar)
  hu-HU ハンガリー語 - ハンガリー Hungarian - Hungary
  pa パンジャブ語 Panjabi; Punjabi
  pa-IN パンジャブ語 - インド Panjabi; Punjabi - India
  pa-US パンジャブ語(ラテン文字) Punjabi in Latin script
  pam-PH パンパンゴ語(フィリピン)。ルソン島中部パンパンガ州, 隣接州(ターラック, ヌエバ・エシーハ, バターン)の一部 Pampanga(Philippines)
  bik-PH ビコール語(フィリピン)。ビコール半島(カマリネス・スール州, アルバイ州, ソルソゴン州, カマリネス・ノルテ州), デュアネス島 Bicolano(Philippines)
  phi ビサヤ語, ヴィサヤ語(フィリピン)。フィリピン中央部, ビサヤ諸島 Visayan, Bisayan(Philippines)
  cpe ピジン語 - ソロモン諸島 Pijin(Pidgin) - Solomon Islands
  tpi トク・ピジン語 - パプアニューギニア Tok Pijin(Tok Pisin) - Papua New Guinea
  bi ビスラマ語 Bislama
  bh ビハール語 Bihari
  hil-PH ヒリガイノン語(イロンゴ族) Hiligaynon(Ilonngo)
  ho ヒリ・モツ語 Hiri Motu
  my ビルマ語(ミャンマー語) Burmese(Myanmar)
  hi ヒンディー語 Hindi
  hi-IN ヒンディー語 - インド Hindi - India
  fj フィジー語 Fijian
  fi フィンランド語 Finnish
  fi-FI フィンランド語 - フィンランド Finnish - Finland
  dz ブータン語 Dzongkha
  fo フェロー語 Faroese(Faeroese)
  fo-FO フェロー語 - フェロー諸島 Faroese(Faeroese) - Faroe Islands
  bug ブギス語 Buginese
  fr フランス語 French
  fr-CA フランス語 - カナダ French - Canada
  fr-CH フランス語 - スイス French - Switzerland
  fr-FR フランス語 - フランス French - France
  fr-BE フランス語 - ベルギー French - Belgium
  fr-MC フランス語 - モナコ French - Monaco
  fr-LU フランス語 - ルクセンブルグ French - Luxembourg
  fy フリジア語 Frisian
  bg ブルガリア語 Bulgarian
  bg-BG ブルガリア語 - ブルガリア Bulgarian - Bulgaria
  br ブルトン語 Breton
  br-FR ブルトン語 Breton
  vi ベトナム語 Vietnamese
  vi-VN ベトナム語 - ベトナム Vietnamese - Viet Nam
  he ヘブライ語 Hebrew
  he-IL ヘブライ語 - イスラエル Hebrew - Israel
  be ベラルーシ語 Belarusian
  be-BY ベラルーシ語 - ベラルーシ Belarusian - Belarus
  fa ペルシア語 Persian
  fa-IR ペルシア語 - イラン Persian - Islamic Republic Of Iran
  hz ヘレ口語 Herero
  bn ベンガル語 Bengali
  bn-BD ベンガル語(バングラデシュ) Bengali - Bangladesh
  ven-ZA Venda語 Venda
  pl ポーランド語 Polish
  pl-PL ポーランド語 - ポーランド Polish - Poland
  bs ボスニア語 Bosnian
  bs-BA ボスニア語 Bosnian
  vo ボラビュック語, ヴォラビュック語 Volapük
  pt ポルトガル語 Portuguese
  pt-BR ポルトガル語 - ブラジル Portuguese - Brazil
  pt-PT ポルトガル語 - ポルトガル Portuguese - Portugal
  mh マーシャル語 Marshallese
  mi マオリ語 Maori
  mi-NZ マオリ語(ニュージーランド) Maori - New Zealand
  mak マカサル語 Makasar
  mk マケドニア語 Macedonian
  mk-MK マケドニア語 - マケドニア共和国 Macedonian - The Former Yugoslav Republic Of Macedonia
  mg マダガスカル語(マラガシ語)。マダガスカル共和国 Malagasy / Madagascar
  nd マタベレ語(北部) North Ndebele
  nr マタベレ語(南部) South Ndebele
  mad マドゥラ語 Madurese
  mr マラティー語 Marathi
  mr-IN マラティー語 - インド Marathi - India
  ml マラヤーラム語 Malayalam
  mt マルタ語 Maltese
  ms マレー語 Malay
  ms-BN マレー語 - ブルネイ Malay - Brunei Darussalam
  ms-MY マレー語 - マレーシア Malay - Malaysia
  gv マン島語 Manx
  min ミナンカバウ語 Minangkabau
  mo モルダビア語 Moldavian
  mo-MD モルダビア語 - モルドバ共和国 Moldavian - Republic Of Moldova
  mn モンゴル語 Mongolian
  mn-MN モンゴル語 - モンゴル Mongolian - Mongolia
  yo ヨルバ語 Yoruba
  lo ラオス語 Lao
  lo-LA ラオス語 - ラオス Lao - Lao People's Democratic Republic
  la ラテン語 Latin
  lv ラトビア語 Latvian
  lv-LV ラトビア語 - ラトビア Latvian - Latvia
  li リグリア語 Limburgan; Limburger; Limburgish
  lt リトアニア語 Lithuanian
  lt-LT リトアニア語 - リトアニア Lithuanian - Lithuania
  ln リンガラ語 Lingala
  ro ルーマニア語 Romanian
  ro-MD ルーマニア語 - モルドバ Romanian - Republic Of Moldova
  ro-RO ルーマニア語 - ルーマニア Romanian - Romania
  lb ルクセンブルグ語 Luxembourgish(Luxemburgisch); Letzeburgesch
  lb-LU ルクセンブルグ語 - ルクセンブルグ Luxembourgish(Luxemburgisch); Letzeburgesch - Luxembourg
  rm レートロマンス語 Raeto-Romance(Rhaeto-Romanic)
  ru ロシア語 Russian
  ru-MD ロシア語 - モルドバ Russian - Republic Of Moldova
  ru-RU ロシア語 - ロシア Russian - Russian Federation
  war-PH ワライ語, サマール・レイテ語(フィリピン)。サマール島全域, レイテ島の東半分 Waray(Philippines)
  wa ワロン語 Walloon
  en 英語 English
  en-IE 英語 - アイルランド English - Ireland
  en-AU 英語 - オーストラリア English - Australia
  en-CA 英語 - カナダ English - Canada
  en-JM 英語 - ジャマイカ English - Jamaica
  en-ZW 英語 - ジンバブエ English - Zimbabwe
  en-TT 英語 - トリニダードトバゴ English - Trinidad And Tobago
  en-NZ 英語 - ニュージーランド English - New Zealand
  en-PH 英語 - フィリピン English - Philippines
  en-BZ 英語 - ベリーズ English - Belize
  en-GB 英語 - 英国 English - United Kingdom
  en-CB 英語 - 西インド諸島。ISO3166にCB見当たらない English
  en-US 英語 - 米国 English - United States
  en-ZA 英語 - 南アフリカ English - South Africa
  en-boont 英語(Boontling) Boontling
  en-GB-oed 英語(GB-oed) English, Oxford English Dictionary spelling
  en-scouse 英語(Scouse) English Liverpudlian dialect known as 'Scouse'
  en-x-SI Standard Units adoption Standard Units adoption
  ko ハングル語 Korean
  ko-KR 韓国語 - 韓国 Korean - Republic Of Korea
  ko-KP 朝鮮語 - 北朝鮮 Korean - Democratic People's Republic Of Korea
  zh 中国語 Chinese
  zh-SG 中国語 - シンガポール Chinese - Singapore
  zh-TW 中国語 - 台湾 Chinese - Taiwan, Province Of China
  zh-CN 中国語 - 中国 Chinese - China
  zh-HK 中国語 - 香港 Chinese - Hong Kong
  zh-MO 中国語 - マカオ Chinese - Macao
  zh-CHS 簡体字中国語 Simplified Chinese
  zh-Hans 簡体字中国語 Chinese, in simplified script
  zh-CHT 繁体字中国語 Traditional Chinese
  zh-Hant 繁体字中国語 Chinese, in traditional script
  zh-gan Kan or Gan Kan or Gan
  zh-guoyu Mandarin or Standard Chinese Mandarin or Standard Chinese
  zh-hakka Hakka Hakka
  zh-min Min, Fuzhou, Hokkien, Amoy or Taiwanese Min, Fuzhou, Hokkien, Amoy or Taiwanese
  zh-min-nan Minnan, Hokkien, Amoy, Taiwanese, Southern Min, Southern Fujian, Hoklo, Southern Fukien, Ho-lo Minnan, Hokkien, Amoy, Taiwanese, Southern Min, Southern Fujian, Hoklo, Southern Fukien, Ho-lo
  zh-min-nan-TW Minnan, Hokkien, Amoy, Taiwanese, Southern Min, Southern Fujian, Hoklo, Southern Fukien, Ho-lo(台湾) Minnan, Hokkien, Amoy, Taiwanese, Southern Min, Southern Fujian, Hoklo, Southern Fukien, Ho-lo(Taiwan)
  zh-wuu 上海語 Shanghaiese or Wu
  zh-xiang Xiang or Hunanese Xiang or Hunanese
  zh-yue 広東語 Cantonese
  za 壮語(チワン語) Zhuang; Chuang
    琉球語。ISO639には未登録らしい。 Ryukyuan
  i-ami Amis語 Amis
  i-bnn ブヌン語 Bunun
  i-default Default Language Context Default Language Context
  i-enochian Enochian語 Enochian
  i-hak Hakka Hakka
  i-klingon クリンゴン語 Klingon
  i-lux Luxembourgish Luxembourgish
  i-mingo Mingo Mingo
  i-navajo Navajo Navajo
  i-pwn Paiwan Paiwan
  i-tao Tao Tao
  i-tay Tayal Tayal
  i-tsu Tsou Tsou
  sgn-BE-fr Belgian-French Sign Language Belgian-French Sign Language
  sgn-BE-nl Belgian-Flemish Sign Language Belgian-Flemish Sign Language
  sgn-BR Brazilian Sign Language Brazilian Sign Language
  sgn-CH-de Swiss German Sign Language Swiss German Sign Language
  sgn-CO Colombian Sign Language Colombian Sign Language
  sgn-DE German Sign Language German Sign Language
  sgn-DK Danish Sign Language Danish Sign Language
  sgn-ES Spanish Sign Language Spanish Sign Language
  sgn-FR French Sign Language French Sign Language
  sgn-GB British Sign Language British Sign Language
  sgn-GR Greek Sign Language Greek Sign Language
  sgn-IE Irish Sign Language Irish Sign Language
  sgn-IT Italian Sign Language Italian Sign Language
  sgn-JP Japanese Sign Language Japanese Sign Language
  sgn-MX Mexican Sign Language Mexican Sign Language
  sgn-NI Nicaraguan Sign Language Nicaraguan Sign Language
  sgn-NL Dutch Sign Language Dutch Sign Language
  sgn-NO Norwegian Sign Language Norwegian Sign Language
  sgn-PT Portuguese Sign Language Portuguese Sign Language
  sgn-SE Swedish Sign Language Swedish Sign Language
  sgn-US American Sign Language American Sign Language
  sgn-ZA South African Sign Language South African Sign Language

対応しているエンコーディング

インデックス化対象ファイルについて、Unicode版msearchが対応しているエンコーディング(文字コード)を以下に列挙します。 呼称は日本語版Internet Explorer 6 Service Pack 1(on Windows XP Professional)での表記です。(Microsoftコードページの欄に番号の記載のあるもののみ。) Microsoftコードページの欄に番号の記載がなくブラウザ名の記載があるものは、Windowsが対応していないエンコーディングです。記載しているブラウザでは対応しています。 これらのエンコーディングを文書中にタグで指定するようにすれば、 インデックス作成時に文字コードが正しく自動判定されます。 なおUnicodeエンコーディング(UTF-8など)について、UTFの観点からwell-formedであるかどうか (ill-formedでないかどうか、すなわち不正なバイトシーケンスが出現していないかどうか)の 検証は行いません。

エンコーディング。タグで指定する時の表記呼称, 対象言語Microsoftコードページ、もしくは対応ブラウザ
Shift_JIS日本語 (シフト JIS)932
ISO-2022-JP日本語 (JIS)50220
csISO2022JP日本語 (JIS 1 バイト カタカナ可)50221
ISO-2022-JP日本語 (JIS)。半角カタカナの開始にSO(Shift Out)、終了にSI(Shift In)を用いるもの。IE6は対応。Mozillaは未対応らしい。50222
EUC-JP日本語 (EUC)51932
EUC-JP日本語 (EUC)。JIS X 0208-1990で追加された文字、もしくはJIS X 0212-1990で規定される文字を含む。IE6は未対応らしい。Mozillaは対応。20932
UTF-8Unicode (UTF-8)。BOMはあってもなくても、どちらでもOKです。(個人的にはBOM有を推奨)65001
unicodeUnicode。UTF-16LEもしくはUTF-32LE。BOM有であること。文字コードの判定はBOMで行うはずで、このラベルで判定することはないはず。1200
unicodeFFFE
unicodeFEFF
Unicode (Big-Endian)。UTF-16BEもしくはUTF-32BE。BOM有であること。FFFEと書いてあるものとFEFFと書いてあるものがある。文字コードの判定はBOMで行うはずで、このラベルで判定することはないはず。1201
utf-16
utf-16le
Unicode (UTF-16)。UTF-16LE, BOM有であること。Mozilla
utf-16beUnicode (UTF-16 Big-Endian)。UTF-16BE, BOM有であること。Mozilla
utf-32
utf-32le
Unicode (UTF-32)。UTF-32LE, BOM有であること。65005?
Mozilla
utf-32beUnicode (UTF-32 Big-Endian)。UTF-32BE, BOM有であること。65006?
Mozilla
iso-10646-ucs-2UCS-2(UTF-16とほぼ同じ)。Little-EndianかBig-Endianのいずれか。いずれの場合もBOM有であること。基本的にXML用の文字コード名。1200?
iso-10646-ucs-4UCS-4(UTF-32はこれのサブセット)。Little-EndianかBig-Endianのいずれか。いずれの場合もBOM有であること。基本的にXML用の文字コード名。1201?
ISO-8859-1西ヨーロッパ言語 (ISO)28591
ISO-8859-2中央ヨーロッパ言語 (ISO)28592
ISO-8859-3ラテン 3 (ISO)28593
ISO-8859-4バルト言語 (ISO)28594
ISO-8859-5キリル言語 (ISO)28595
ISO-8859-6アラビア語 (ISO)28596
ISO-8859-7ギリシャ語 (ISO)28597
ISO-8859-8ヘブライ語 (ISO-Visual)28598
ISO-8859-9トルコ語 (ISO)28599
ISO-8859-10北欧言語 (ISO)Mozilla
ISO-8859-11タイ語, TIS-620とほぼ同じ。IE6ではWindows-874として扱われているらしい。Mozilla
ISO-8859-13エストニア語 (ISO)28603
ISO-8859-14ケルト言語 (ISO)Mozilla
ISO-8859-15ラテン 9 (ISO)28605
ISO-8859-16ルーマニア語 (ISO)Mozilla
Windows-874タイ語 (Windows)874
Windows-1250中央ヨーロッパ言語 (Windows)1250
Windows-1251キリル言語 (Windows)1251
Windows-1252西ヨーロッパ言語 (Windows)1252
Windows-1253ギリシャ語 (Windows)1253
Windows-1254トルコ語 (Windows)1254
Windows-1255ヘブライ語 (Windows)1255
Windows-1256アラビア語 (Windows)1256
Windows-1257バルト言語 (Windows)1257
Windows-1258ベトナム語 (Windows)1258
Windows-Sami-2北欧言語Opera
ARMSCII-8アルメニア語Mozilla
ASMO-708アラビア語 (ASMO 708)708
GEOSTD8グルジア語Mozilla
ISO-IR-111キリル言語 (ISO)Mozilla
KOI8-Rキリル言語 (KOI8-R)20866
KOI8-Uキリル言語 (KOI8-U)21866
TIS-620
x-tis620
タイ語, ISO-8859-11とほぼ同じ。IE6ではWindows-874として扱われているらしい。Mozilla
US-ASCIIUS-ASCII20127
x-IA5西ヨーロッパ言語 (IA5)20105
x-IA5-Germanドイツ語 (IA5)20106
x-IA5-Norwegianノルウェー語 (IA5)20108
x-IA5-Swedishスウェーデン語 (IA5)20107
x-viet-tcvn5712ベトナム語Mozilla
visciiベトナム語Mozilla
x-viet-vpsベトナム語Mozilla
IBM437OEM アメリカ合衆国437
DOS-720アラビア語 (DOS)720
IBM737ギリシャ語 (DOS)737
IBM775バルト言語 (DOS)775
IBM850西ヨーロッパ言語 (DOS)850
IBM852中央ヨーロッパ言語 (DOS)852
IBM855OEM キリル855
IBM857トルコ語 (DOS)857
IBM00858
CP858
マルチリンガル ラテン I858
IBM860ポルトガル語 (DOS)860
IBM861アイスランド語 (DOS)861
DOS-862
IBM862
ヘブライ語 (DOS)862
IBM863フランス語 (カナダ) (DOS)863
IBM864アラビア語 (864)864
IBM865北欧 (DOS)865
IBM866キリル言語 (DOS)866
IBM869ギリシャ語, Modern (DOS)869

以下、上記対応エンコーディングについての毛流麦花のメモ(覚書き)です。

Windows-Sami-2: 北欧言語向けのエンコーディングです。 省略してwinsami2と表記することもあります。 ノルウェーの会社が開発したOperaは対応しています。(というか、Operaしか対応していません。) 北欧に対して強い思い入れのある毛流麦花といたしましては、Windows-Sami-2への対応を外すわけにはまいりません。(笑) 北欧言語向けのエンコーディングとしてはこれ以外に ISO-8859-10 (Latin6) があります。

ARMSCII-8: アルメニア語で使われているエンコーディングです。 なお,"Armenian Eternity Sign"と"Armenian Section Sign"には対応していません。 アルメニア語ではこれ以外にARMSCII-7, ARMSCII-8A, ARMSCII-16のエンコーディングがありますが、これらには対応していません。

IA5: International Alphabet No.5の略で、情報交換用の符号体系の一種で、ITU-T勧告T.50にて規定されています。 ("International Reference Alphabet (IRA) (Formerly International Alphabet No. 5 or IA5) - Information technology - 7-bit coded character set for information interchange") ISO-646でも規定されているらしいですが、当方では確認していません。(ECMA-6 にも記述があります。) x-IA5、x-IA5-German、x-IA5-Norwegian、x-IA5-Swedishのいずれのエンコーディングにも対応しています。 IA5では、0x00から0x7Fまでの文字を規定しています。 各々(x-IA5、x-IA5-German、x-IA5-Norwegian、x-IA5-Swedish)が 0x23, 0x24, 0x40, 0x5B, 0x5C, 0x5D, 0x5E, 0x60, 0x7B, 0x7C, 0x7D, 0x7Eに独自の文字を割り当てています。 x-IA5はIRV(International Reference Version)と呼ぶこともあります。 前述コード領域の文字を規定していない素のIA5もあります。 普段からおなじみのASCIIは、IA5の米国バージョンのことです。

TIS-620: タイ語で使われているエンコーディングです。0xA0(NO-BREAK SPACE)がないことを除けば、ISO-8859-11と同等です。

ISO-IR-111, KOI8-R, KOI8-U: ロシア・ウクライナなどのキリル言語圏で使われているエンコーディングです。 ISO-IR-111はRFC-1345, KOI8-RはRFC-1489, KOI8-UはRFC-2319で規定されています。

TCVN, VISCII, VPS: ベトナム語圏で使われているエンコーディングです。 TCVNはTCVN 5712:1993のことで, VSCII-1とも呼ばれます。(VSCIIはVietnam Standard Code for Information Interchangeの略。) この他にもVSCII-2, VSCII-3があります。 VISCIIは上述VSCIIとは別物で、RFC-1456で規定されています。 VPSはVietnamese Professionals Societyが規定したエンコーディングで、VNCIIとも呼ばれます。

未対応のエンコーディング

インデックス化対象ファイルについて、Unicode版msearchが対応していないエンコーディング(文字コード)を列挙します。 エンコーディングは、タグで指定できるものはその表記になっています。 呼称は日本語版Internet Explorer 6 Service Pack 1(on Windows XP Professional)での表記です。(Microsoftコードページの欄に番号の記載のあるもののみ。) Microsoftコードページの欄に番号の記載がなくブラウザ名の記載があるものは、Windowsが対応していないエンコーディングです。記載しているブラウザでは対応しています。

エンコーディング呼称, 対象言語Microsoftコードページ、もしくは対応ブラウザ
UTF-7Unicode (UTF-7)65000
UTF-EBCDICUnicode (UTF-EBCDIC)未確認
x-imap4-modified-utf7IMAP4 Unicode (UTF-7)Mozilla
ASMO-449アラビア語未確認
ISIRI-2900ペルシア語(イラン)未確認
ISIRI-3342ペルシア語(イラン)未確認
cp1368アラビア語(マレーシア)未確認
ISO-8859-6-Iアラビア語未確認
ISO-8859-6-Eアラビア語未確認
ISO-8859-8-Iヘブライ語 (ISO-Logical)38598
ISO-8859-8-Eヘブライ語未確認
x-iscii-asISCII アッサム語57006
x-iscii-beISCII ベンガル語57003
x-iscii-deISCII デバナガリ文字57002
x-iscii-guISCII グジャラート語57010
x-iscii-kaISCII カンナダ語57008
x-iscii-maISCII マラヤーラム語57009
x-iscii-orISCII オリヤー語57007
x-iscii-paISCII パンジャブ語57011
x-iscii-taISCII タミール語57004
x-iscii-teISCII テルグ語57005
IBM037IBM EBCDIC (US - カナダ)037
IBM500IBM EBCDIC (インターナショナル)500
IBM870IBM EBCDIC (多国語ラテン 2)870
CP875IBM EBCDIC (ギリシャ語 Modern)875
IBM1026IBM EBCDIC (トルコ語ラテン 5)1026
IBM01047IBM ラテン-11047
IBM01140IBM EBCDIC (US - カナダ - ヨーロッパ)1140
IBM01141IBM EBCDIC (ドイツ - ヨーロッパ)1141
IBM01142IBM EBCDIC (デンマーク - ノルウェー - ヨーロッパ)1142
IBM01143IBM EBCDIC (フィンランド - スウェーデン - ヨーロッパ)1143
IBM01144IBM EBCDIC (イタリア - ヨーロッパ)1144
IBM01145IBM EBCDIC (スペイン - ヨーロッパ)1145
IBM01146IBM EBCDIC (UK - ヨーロッパ)1146
IBM01147IBM EBCDIC (フランス - ヨーロッパ)1147
IBM01148IBM EBCDIC (インターナショナル - ヨーロッパ)1148
IBM01149IBM EBCDIC (アイスランド語 - ヨーロッパ)1149
IBM273IBM EBCDIC (ドイツ)20273
IBM277IBM EBCDIC (デンマーク - ノルウェー)20277
IBM278IBM EBCDIC (フィンランド - スウェーデン)20278
IBM280IBM EBCDIC (イタリア)20280
IBM284IBM EBCDIC (スペイン)20284
IBM285IBM EBCDIC (UK)20285
IBM290IBM EBCDIC (日本語カタカナ)20290
IBM297IBM EBCDIC (フランス)20297
IBM420IBM EBCDIC (アラビア語)20420
IBM423IBM EBCDIC (ギリシャ語)20423
IBM424IBM EBCDIC (ヘブライ語)20424
x-EBCDIC-KoreanExtendedIBM EBCDIC (韓国語 Extended)20833
IBM-ThaiIBM EBCDIC (タイ語)20838
IBM871IBM EBCDIC (アイスランド語)20871
IBM880IBM EBCDIC (キリル言語 - ロシア語)20880
IBM905IBM EBCDIC (トルコ語)20905
IBM00924IBM ラテン-120924
CP1025IBM EBCDIC (キリル言語 セルビア - ブルガリア)21025
GB2312簡体字中国語 (GB2312)936
x-cp20936
gb_2312-80
簡体字中国語 (GB2312-80)20936
x-cp50227簡体字中国語 (ISO-2022)50227
ISO-2022-CN簡体字中国語 (ISO-2022-CN)Mozilla
euc-cn簡体字中国語 (EUC)51936
HZ-GB-2312簡体字中国語 (HZ)52936
GB18030簡体字中国語 (GB18030)54936
x-GBK簡体字中国語 (GBK)Mozilla
Big5繁体字中国語 (Big5)950
Big5-HKSCS繁体字中国語 (Big5-HKSCS)Mozilla
x-Chinese-CNS繁体字中国語 (CNS)20000
x-Chinese-Eten繁体字中国語 (Eten)20002
x-euc-tw繁体字中国語 (EUC-TW)Mozilla
x-cp20001TCA 台湾20001
x-cp20003IBM5550 台湾20003
x-cp20004TeleText 台湾20004
x-cp20005Wang 台湾20005
ks_c_5601-1987
x-ksc5601-11
韓国語949
Johab韓国語 (Johab)1361
x-Johab韓国語 (Johab)Mozilla
x-cp20949韓国語 Wansung20949
ISO-2022-KR韓国語 (ISO)50225
euc-kr韓国語 (EUC)51949
x-Windows-949韓国語 (UHC)Mozilla
x-cp20261T.6120261
T.61-8bitT.61Mozilla
x-cp20269ISO-693720269
x-cp21027Ext Alpha Lowercase21027
adobe-symbol-encodingSymbolMozilla
x-dingbatsDingBatsMozilla
x-dectechDECTECHMozilla
x-EuropaEuropa。未確認29001
x-user-definedユーザー定義なし
x-Mac-Arabicアラビア語 (Mac)10004
x-Mac-CE中央ヨーロッパ言語 (Mac)10029
Macintosh西ヨーロッパ言語 (Mac)10000
x-Mac-ChineseSimp簡体字中国語 (Mac)10008
x-Mac-ChineseTrad繁体字中国語 (Mac)10002
x-Mac-Croatianクロアチア語 (Mac)10082
x-Mac-Cyrillicキリル言語 (Mac)10007
x-Mac-Devanagariデバナガリ文字 (Mac)。ヒンディー語, サンスクリット語Mozilla
x-Mac-Farsiペルシア語 (Mac)Mozilla
x-Mac-Greekギリシャ語 (Mac)10006
x-Mac-Gujaratiグジャラート語 (Mac)。ナーガリー文字Mozilla
x-Mac-Gurmukhiグルムキー文字 (Mac)。パンジャブ語Mozilla
x-Mac-Hebrewヘブライ語 (Mac)10005
x-Mac-Japanese日本語 (Mac)10001
x-Mac-Icelandicアイスランド語 (Mac)10079
x-Mac-Korean韓国語 (Mac)10003
x-Mac-Roman西ヨーロッパ言語 (Mac)Mozilla
x-Mac-Romanianルーマニア語 (Mac)10010
x-Mac-Thaiタイ語 (Mac)10021
x-Mac-Turkishトルコ語 (Mac)10081
x-Mac-Ukrainianウクライナ語 (Mac)10017

以下、上記以外の未対応エンコーディングについての毛流麦花のメモ(覚書)です。

CESU-8: CESU-8とは、8-bit Compatibility Encoding Scheme for UTF-16のことで、 Unicode Technical Reports #26(UTR 26)で規定されています。(Unicodeの正式な仕様の一部ではありません。) UTF-16のデータを(バイトオーダーを考慮する必要のない)8bit単位で処理するためのエンコーディングで、 BMP領域の文字はUTF-8と同じようにエンコーディングされます。 補助プレーンの文字については(Unicodeコードポイントではなく)UTF-16のサロゲートペアー(surrogate pair)を 6バイトにエンコーディングする点がUTF-8との違いです。 もともとCESU-8はソフトウェア内部で用いるためのエンコーディングであってWebページなどで使うためのものではないので、 対応する必要性は低いものと考えています。

文字コード判定の詳細

(1)インデックス作成時、インデックス化対象ファイルの文字コードの判定は以下の手順で行われます。

  1. UTF-16LE, 16BE, 32LE, 32BEについては、BOMの有無で判定します。
  2. それ以外については、まずHTMLの<meta>タグのエンコーディングを探します。(※1)
  3. 見つかれば、その結果を返します。
  4. 見つからない場合は、XML宣言のエンコーディングを探します。
  5. 見つかれば、その結果を返します。
  6. 見つからない場合は、UTF-8のBOMの有無を調べます。
  7. UTF-8のBOMが有れば、UTF-8であると判定します。(※2)
  8. UTF-8のBOMが無い場合は、ひらがなもしくは全角カタカナが連続で4文字出現する箇所があるかどうかを調べます。(ひらがな・カタカナいずれか一方のみの4文字でもよいし、両者が混在して4文字でもよい。)
  9. 該当箇所が有る場合は、UTF-8であると判定します。(※3)
  10. 該当箇所が無い場合は、ひらがなもしくは全角カタカナが連続で3文字出現する箇所が4箇所以上あるかどうかを調べます。(ひらがな・カタカナいずれか一方のみの3文字でもよいし、両者が混在して3文字でもよい。)
  11. 該当した場合は、UTF-8であると判定します。(※3)
  12. 該当しなかった場合は、jcode.plの判定結果をそのまま返します。

(2)検索実行時、HTMLページの検索フォームからサーバーに送られた 検索文字列の文字コードの判定は、 ヒント文字列(検索フォームにhidden属性で埋め込まれたname="hint"の<input>タグ)を使って行われます。 すなわち、ヒント文字列の文字コードを判定し、 検索文字列もその文字コードでエンコードされていると判断します。(※4)

※1:文字コードの判定にタグを調べるのには、2つの理由があります。 1番目の理由は, 文字コードを判定する際、UTF-8とShift_JIS, EUC-JP間の見極めが難しいことによります。 これらの文字コードは使用しているコード領域が重なっています。 2番目の理由は, ISO-8859, CodePageなどの各種エンコーディングに対応するためです

※2:この判定を行っているため、「鏤身」(注:ルシン、もしくはロウシンと読みます。)などの「鏤」で始まる字句が ファイルの先頭にあるEUC-JPのファイル(非マークアップのテキスト)をUTF-8であると誤判定する可能性があります。

※3:この判定は簡易的なものです。Shift_JISにおいては、 「絆」、「罠」、「羞恥」、「飛翔」、「胚芽」などの 1バイト目が0xE3の文字を含む字句が多く出現するファイル(非マークアップのテキスト)、 EUC-JPにおいては、 「祭祀」、「齋藤」、「稟議」、「改竄」などの 1バイト目が0xE3の文字を含む字句が多く出現するファイル(非マークアップのテキスト)、 などをUTF-8であると誤判定する可能性があります。この種の誤判定を防止したい場合は、 当該ページをHTML化した上で、<meta>タグで文字コードを指定してください。

※4:本家版msearchでは、当初、検索文字列の文字コード判定を 検索文字列そのもの(検索窓に入力した文字列)を使って行っていたのですが、 この方法だと、全角文字1文字で検索すると文字コードの判定がうまく行われず 結果として正しく検索できない場合があると いう問題が発生し、本家版msearch 1.51以降では、ヒント文字列で文字コードを 判定する方法に変更されています。当時のmsearch掲示板(閉鎖済)を調べると、 「簪(かんざし)という文字で検索するとうまく検索できない」という 問題だったようです。

TIPS

Unicode版msearchを活用する上でのコツ、秘訣、裏技です。

全件ヒットさせたい

検索対象に絶対に出てこない文字列のNOT検索を行います。検索対象に絶対出現しないような文字列、例えば「ばみぼずら」の NOT検索、具体的には「-ばみぼずら」で検索すれば、全件ヒットします。

よもやま話

Unicode版msearchにまつわる、主に技術的な話です。

誤検索(ミスマッチ)による文字化けの話

本家版msearchでは特定の文字列で検索すると、文字化けが発生することがあります。(検索結果画面のサマリー表示が文字化けする。) これは、検索文字列のバイトシーケンスが、検索対象内の文字境界間ではなく中途半端な場所でヒットしてしまうことに起因します。 具体例を見てみましょう。 (下記例は小職が本家版msearchを使っていた時に実際に遭遇した事例で、 Unicode版msearch開発のきっかけとなったもの。 以下、本家msearchサイトのmsearch掲示板(閉鎖済)から要約して引用。)

本家版msearchでの誤検索(ミスマッチ)による文字化けの例
[検索文字列]
北 CB,CCB2,A4

[検索対象内]
す A4,B9
で A4,C7
に A4,CBCC,B2A4,EA

本家版msearchでは、インデックスをEUC-JPエンコーディングで作成しており、 「北欧」と「すでに眠り」のバイトシーケンスは上記のようになります。 「北欧」のバイトシーケンスは、上記のように「すでに眠り」の中に出現しますが、 文字境界間ではなく「文字の途中から途中まで」と中途半端な場所に出現します。 このため「北欧」で検索すると、文字化けします。

これに対して、インデックスをUTF-8エンコーディングで作成するUnicode版msearchでは、 上記のような誤検索(ミスマッチ)に起因する文字化けは原理的に発生しません。

それはUTF-8エンコーディングで使用しているコード領域に秘密があります。 以下の表はUCS-4全領域の文字をUTF-8でエンコーディングした時のバイトシーケンスを示します。 0x0000から0x0010FFFFまでのUCS-4値は、Unicodeコードポイントと同じです。 各数値は16進数表記です。 (以下の表は説明用に簡略化してあり、実際のUTF-8ではill-formed(不正)として扱われるバイトシーケンスも含まれています。 厳密な意味での(well-formedな)UTF-8で使われるバイトシーケンスはもう少し複雑です。詳しくはUnicode 4.0仕様書の "3.9 Unicode Encoding Forms"をご参照ください。)

1バイト目2バイト目3バイト目4バイト目5バイト目6バイト目UCS-4値
00-7F     0x0000 - 0x007F
C0-DF80-BF    0x0080 - 0x07FF
E0-EF80-BF80-BF   0x0800 - 0xFFFF
F0-F780-BF80-BF80-BF  0x00010000 - 0x001FFFFF
F8-FB80-BF80-BF80-BF80-BF 0x00200000 - 0x03FFFFFF
FC-FD80-BF80-BF80-BF80-BF80-BF0x04000000 - 0x7FFFFFFF

各文字の1バイト目で使用しているコード領域はバイト数の異なる他の文字の1バイト目と重なっておらず、 さらに各文字の2バイト目以降とも重なっていません。これはすなわち、検索動作(パターンマッチ動作)を 行う際に、文字の途中から途中までという中途半端な場所にマッチする恐れがないことを意味します。 この特徴はUTF-8ならではのもので、UTF-16, UTF-32にはありません。 なおコード領域が重なっていないことには、他にも以下のメリットがあります。

もっと詳しく知りたい場合は、RFC-2279もしくはRFC-3629 "UTF-8, a transformation format of ISO 10646"をご参照ください。 (RFC-2279はドラフト版、RFC-3629は正式版です。)

Unicode版msearch開発に至るまでの経緯

msearchの検索エンジン内部を調べていて、「エンジン本体そのままで内部エンコードをUTF-8に変更しても動作するのではないか?」と 考えたのがきっかけです。そもそも検索エンジン内部に首をつっこんだのは、「北欧」で検索すると文字化けが発生するという事象に遭遇したためです。 以下に時系列で記します。(以下、本家msearchサイトのmsearch掲示板(閉鎖済)から要約して引用。)

[2002年11月29日] 「北欧」で検索すると文字化けが発生する(検索結果のサマリー表示が文字化け)という事象に遭遇。

[2003年9月14日] msearch.cgi(当時はver1.50)を改造することで問題解決。 検索クエリー中に文字化けを誘発する語句(北欧など)が含まれている場合、その語句については全角1文字検索に準じた検索(厳密なパターンマッチング)を行うことで、 問題解決した。

[2003年11月15日] msearchのUnicode対応化実験。この時点では、Unicodeエンコーディングのファイルも インデックス化できるだけであり、インデックスそのもののエンコーディングはEUC-JPのまま。

[2004年1月20日] Unicode版msearchのテスト開始。 インデックスのエンコーディングがUTF-8になり、ようやく「Unicodeに対応しました」と呼べる代物になった。

[2004年3月10日] Unicode版msearch Ver. 1.51(U1)-β1の公開開始。 2004年4月15日に正式版公開開始。 ちなみにこの時点では、プロバイダ(@Nifty)のホームページスペースを使っていた。 レンタルサーバーに引っ越ししたのは、Unicode版msearch Ver 1.52(U1)公開時(2005年3月8日)から。

スクリプトファイルのエンコードがEUCとなっている理由

Unicode版msearchに含まれているスクリプトファイル(.cgi, .pl)のエンコードは UTF-8ではなくEUC-JPとなっていますが、これには理由があります。

Unicode未対応の古いPerlでBOM付UTF-8で保存されたPerlスクリプトを実行しようとすると エラーになるためです。Unicode版msearchは、Unicode未対応のPerl(5.004など)でも 動作するようになっており、BOMに起因する上記トラブルを回避するために、 スクリプトファイルのエンコードは敢えて、EUC-JPのままとしています。

ちなみにUnicodeに正式対応したPerlでは、BOM付UTF-8で 保存されたPerlスクリプトであっても、問題なく実行できます。

ページのトップへ戻る