| MIME / IANA | シフトJIS |
|---|---|
| 別名 | MS_Kanji、[1] PCK [2] [3] |
| 言語 | 主に日本語ですが、英語、ロシア語、ブルガリア語、ギリシャ語もサポートしています。 |
| 標準 | JIS X 0208:1997 付録1 |
| 分類 | 拡張 ISO 646、[a] 可変幅エンコーディング、CJK エンコーディング |
| 拡張 | JIS X 0201 8ビット形式 |
| 変換/エンコード | JIS X 0208 |
| 後継者 | Shift_JIS-2004 (JIS) Windows-31J (Web) |
シフトJIS(別名SJIS、MIME名Shift_JIS 、 SolarisのコンテキストではPCKとして知られる) [2] [3]は、日本語の文字エンコーディングであり、もともと日本のASCII株式会社[ b]がマイクロソフトと共同で開発し、 JIS X 0208付録1として標準化された。
シフト JIS は、 JIS規格JIS X 0201 :1997 ( 1 バイト文字の場合) およびJIS X 0208 :1997 ( 2 バイト文字の場合)で定義された文字セットに基づいています。
2024年9月現在[update]、調査対象のウェブページの0.3%がShift JIS(実際にはそのスーパーセットであるWindows-31Jエンコーディングとしてデコード)を使用しており、2014年7月の1.3%から減少しています。[4] Shift JISは日本語のウェブサイトで2番目に多く宣言されている文字エンコーディングで、.jpドメインのサイトの4.9%で使用されています。一方、UTF-8は日本語のウェブサイトの95.1%で使用されています。[5] [6]
構造
シフト JIS は、シングルバイト エンコーディングJIS X 0201 :1997の拡張であり、JIS X 0201で割り当てられていないコード ポイントを使用して、ダブルバイトJIS X 0208 :1997文字セットをエンコードします。ダブルバイト文字の先頭バイトは、シングルバイト範囲0xA1 から 0xDF 内の 64 個の半角カタカナ文字の周囲に「シフト」されます。
0x00から 0x7F までのシングルバイト文字は、ASCII 文字セットのバックスラッシュとチルダの代わりに0x5C の円記号 (U+00A5) と0x7E のオーバーライン(U+203E) がそれぞれ使用されることを除き、 ASCIIエンコードと一致します (これらの ASCII からの逸脱は、JIS X 0201と一致しています)。0xA1 から 0xDF までのシングルバイト文字は、 JIS X 0201にある半角カタカナ文字にマップされます。
2 バイト文字の場合、最初のバイトは常に 0x81 から 0x9F の範囲、または 0xE0 から 0xEF の範囲です (これらの範囲はJIS X 0201では割り当てられていません)。最初のバイトが奇数の場合、2 番目のバイトは 0x40 から 0x9E の範囲である必要があります (ただし、0x7F は不可)。最初のバイトが偶数の場合、2 番目のバイトは 0x9F から 0xFC の範囲である必要があります。
シフト JIS では、2 バイト文字の最初のバイトが高ビット セット (0x80~0xFF) になることのみが保証され、2 番目のバイトの値は高かったり低かったりする可能性があります。バイト値 0x40~0x7E がコード ワードの 2 番目のバイトとして出現すると、同じコードが ASCII 文字に使用されるため、シフト JIS の信頼性の高い検出が困難になります。同じバイト値が最初のバイトまたは 2 番目のバイトになる可能性があるため、単純な検索では文字の 2 番目のバイトと次の文字の最初のバイトが一致する可能性があり、これは有効なシフト JIS 文字ではないため、文字列検索は困難です。文字列検索アルゴリズムは、シフト JISに合わせてカスタマイズする必要があります。
互換性
Shift JIS はJIS X 0201シングルバイト エンコーディングと完全に下位互換性があるため、有効なJIS X 0201文字列は Shift JIS でも有効です。
JIS X 0208の2バイト文字は、Shift JISでエンコードするためには変換する必要がある。2バイトのJIS X 0208シーケンスの場合、[c]対応するShift JISバイトへの変換は次のようになる。
競合する 8 ビット形式EUC-JPは、1 バイトの半角カタカナをサポートしていませんが、すべての上位ビットセット バイトが 2 バイト文字の一部であり、ASCII 範囲のすべてのコードが 1 バイト文字を表すため、JIS X 0208コード ポイントとの間でよりクリーンで直接的な変換が可能になります。
使用法
Shift JISで記述された HTML は、誤って ASCII としてタグ付けされ、文字セット タグがドキュメント自体の先頭にある場合でも、ある程度は解釈できます。これは、HTML タグとフィールドの重要な開始と終了 ( 、、、、、、)<がASCIIと同じバイトとしてエンコードされ、それらのバイトが 2 バイト シーケンスで表示されないためです。
>/"&;
シフト JIS は、 Cなどのプログラミング言語の文字列リテラルで使用できますが、いくつか考慮すべき点があります。まず、エスケープ文字0x5C (通常はバックスラッシュ) は、シフト JIS では半角円記号(¥)です。プログラマーがこれを認識している場合は、 (ハローワールドはHello, worldで、¥n はエスケープ シーケンス)を使用できます(I/O システムがシフト JIS出力をサポートしている場合)。次に、 0x5C バイトは、2 バイト文字の 2 番目のバイトとして出現すると問題が発生します。これは、別の 0x5C が続かない限り、エスケープ シーケンスとして解釈され、解釈が混乱するためです。
printf("ハローワールド¥n");
複数のバージョン


Shift JIS にはさまざまなバージョンが存在します。拡張できる領域は 2 つあります。
まず、JIS X 0208 は、Shift JIS でエンコードされた 94×94 のスペース全体を埋めるわけではないため、ここにはさらに多くの文字を配置する余地があります。これらは、Shift JIS 自体ではなく、実際には JIS X 0208 の拡張です。
第二に、シフト JIS には、 JIS X 0201およびJIS X 0208に必要なエンコード空間よりも多くのエンコード空間があり(以下の § シフト JIS バイト マップを参照)、この空間はさらに多くの文字 (シングルバイト文字またはダブルバイト文字) に使用できます。
Windows-932 / Windows-31J
最も一般的な拡張は、Windows コード ページ 932 ( IBM の Shift JIS 拡張にも使用されるCCSID ) であり、これは Shift JIS とは別に、 IANAに「Windows-31J」として登録されています[1]。これは Microsoft によって普及されましたが、Microsoft 自身は Windows-31J という名前を認識しておらず、そのバリエーションを「shift_jis」と呼んでいます[7] [8]。IBMのコード ページ 943 には、Microsoft のコード ページ 932 と同じ 2 バイト コードが含まれていますが、IBM のコード ページ 932 には拡張機能が少なく (Microsoft が NEC から取り入れたものを除く)、1983 標準の文字バリアントのスワップを実装するのではなく、1978 年版 JIS X 0208 の文字順序が保持されています[9]。
Windows-31Jは、US-ASCIIに従って、 0x5CをU+005C REVERSE SOLIDUS(バックスラッシュ)に、0x7EをU+007E TILDEに割り当てます。[10]ただし、Windowsのほとんどのローカライズされたフォントでは、JIS X 0201互換性のためにU+005Cが円記号として表示されます。[11] [12]これには、「NEC特殊文字(行13)、NEC選択のIBM拡張(行89〜92)、IBM拡張(行115〜119)」[1]といういくつかの拡張機能が含まれており、さらにエンドユーザーの定義用にいくらかのエンコード空間が確保されています。[13]
Windowsコードページ932は、 HTML5で使用されるW3C / WHATWGエンコード標準で使用されているバージョンであり、JIS X 0208の表にWindows-31Jの「以前はIBMとNECの独自の拡張機能」が含まれています。[14]また、「展開されたコンテンツと互換性がある」という意図で、「shift_jis」というラベルを「windows-31j」と交換可能に扱います。[15]
マック日本語
古典的なMac OSに由来するShift-JISのバージョン(x-mac-japanese、コードページ10001 [7]またはMacJapaneseとして知られる)では、チルダに0x7E(ここで上線を割り当てるJIS X 0201ではなく、US-ASCIIに従う)が割り当てられましたが、円記号には0x5C(JIS X 0201と標準Shift JISと同じ)が割り当てられていました。また、JIS X 0201を拡張し、バックスラッシュに0x80(US-ASCIIの0x5Cに相当)、ノーブレークスペースに0xA0、著作権記号に0xFD、商標記号に0xFE、半角の水平省略記号に0xFFを割り当てました。また、拡張2バイト文字も追加されました。これには、 Shift_JIS範囲0xEB41~0xED96の53の縦書き表示形式(その標準形式からJIS行84行下)と、Shift_JIS範囲0x8540~0x886Dの260の特殊文字が含まれる。[16]この変種はKanjiTalkバージョン7で導入された。[17]
ただし、一部の Mac OS 書体では他のバリアントが使用されていました。Sai Mincho と Chu Gothic は MacJapanese の「PostScript 」バリアントを使用しており、これには追加の縦書き表示形式と、 NEC 特殊文字に基づいた異なる拡張特殊文字セットが含まれており、その一部はフォントのプリンターバージョンでのみ使用できました。[16] System 7.1の丸ゴシックと本明朝の古いバージョンでは、縦書き表示形式を標準形式から 10 (84 ではなく) JIS 行下にエンコードし、特殊文字拡張を含んでいませんでしたが、これは後に変更されました。[16] [18] KanjiTalk バージョン 6 で使用される一般的なバリアントでは、縦書き表示形式を 10 行下に配置し、行 13 に NEC 拡張レイアウトを使用しました。[19]
Shift_JISx0213 および Shift_JIS-2004
| 別名 | Shift_JISx0213 |
|---|---|
| 言語 | 日本語、アイヌ語、英語、ロシア語 |
| 標準 | JIS X 0213 |
| 拡張 | Shift_JIS (1997)、 JIS X 0201 (8 ビット) |
| 変換/エンコード | JIS X 0213 |
| 先行 | Shift_JIS (1997) |
新しいJIS X 0213規格では、Shift_JISの拡張版としてShift_JISx0213(以前の規格ではShift_JIS-2004 )が定義されています。これは標準Shift JISのスーパーセットです。[20]
Shift_JIS-2004では、JIS X 0213の両平面に割り当てられた行を表現するために、以下のコードポイントのマッピング方法を採用している。[21]
上記で、は 2 バイトの Shift_JIS-2004 シーケンス、は平面(面、men、surface)番号 (1 または 2)、は行(区、ku、ward)番号 (1-94)、はセル(点、ten、point)番号 (1-94) です。ku番号とten番号はそれぞれ、およびに相当します。ここで、 は特定の平面を参照する 2 バイトの JIS シーケンスです。
同じ文字セットは、 EUC-JP ベースの対応文字 であるEUC-JIS-2004でも表すことができます。
追加された文字の中には、Web標準で使用されているWindowsコードページ932(上記参照)など、一般的なShift JIS拡張機能と衝突するものもあります。たとえば、JIS X 0213の第1面89行目(硃、硎、硏...で始まる)[22]と、Web標準で定義されているJIS X 0208の変形の89行目(纊、褜、鍈...で始まる)[23]を比較してください。さらに、一部の文字はBMPを超えてUnicode文字にマッピングされます。
その他のバリエーション
リードバイト0xF5から0xF9までのスペース(JIS X 0208で使用される領域外)は、日本の携帯電話事業者が電子メールで使用する絵文字として使用されています。[24] KDDIはさらに進んで、リードバイト0xF3と0xF4のスペースにさらに数百の絵文字を定義しています。[25]
さらに、Shift JIS には、あちこちの文字が変更された小さなバリエーションが数多く作成されています。これらの拡張機能とバリアントのほとんどはIANA に登録されていないため、拡張機能を使用すると混乱が生じる可能性が高くなります。
バリアントは、 Cや類似のプログラミング言語のソース コード文字列で Shift JIS をエンコードする場合に使用する必要があります。このバリアントは、2 バイト文字の 2 番目のバイトとして 0x5C バイトが出現した場合は 2 倍にしますが、単一の "¥" (ASCII: "\") 文字として出現した場合は 0x5C バイトを 2 倍にしません。これは、0x5C がエスケープ シーケンスの始まりであるためです。これを処理する最良の方法は、Shift JIS をこのようにエンコードする特別なエディターを使用することです。
シフト JIS バイトマップ
JIS X 0208:1997の定義による
以下の表は、標準シフト JIS ( JIS X 0208:1997に準拠) でエンコードされたストリーム内の各バイトの詳細な意味を示しています。
ベンダーまたはJIS X 0213拡張付き
JIS X 0208:1997でシングルバイトコードや先頭バイトに使用されないバイトの一部は、特定の拡張機能によって使用され、その結果、以下の表に詳細を示すレイアウトになります。
参照
脚注
- ^ 厳密な意味ではそうではありません。ASCII バイトがトレイル バイトとして表示されることがあるためです。
- ^ ASCII Corporation は、この記事の他の箇所で使用されているASCII エンコーディングと混同しないでください。
- ^ JIS X 0208では、j 1とj 2はそれぞれ33(0x21)から126(0x7e)までの範囲(つまり、制御文字(0~31(0x1f)と127(0x7f))とスペースを除く7ビットの文字値)です。
参考文献
- ^ abc 「文字セット」。IANA。
- ^ ab "convutf8.c". OpenSolaris . 305 行目. 2008-11-12.
- ^ ab 「追加の日本語 iconv モジュール」。Solaris 9 9/04 オペレーティング環境の新機能。Oracle Corporation。
- ^ 「ウェブサイトの文字エンコーディングの使用に関する歴史的傾向、2024年5月」。w3techs.com 。 2024年5月22日閲覧。
- ^ 「.jp を使用するウェブサイトにおける文字エンコーディングの分布」w3techs.com . 2024年9月3日閲覧。
- ^ 「日本語を使用するウェブサイトにおける文字エンコーディングの分布」w3techs.com . 2024年9月3日閲覧。
- ^ ab "Encoding.WindowsCodePage プロパティ – .NET Framework (現在のバージョン)". MSDN . Microsoft.
- ^ 「コード ページ識別子」。Windowsデベロッパー センター。Microsoft。2021 年 1 月 7 日。
- ^ 「IBM-943 および IBM-932」。IBM Knowledge Center。IBM。
- ^ "CP932.TXT". Unicodeコンソーシアム。
- ^ 「3.1.1 問題の詳細」。Unicodeおよびユーザー/ベンダー定義文字の問題と解決策。The Open Group Japan。1999 年 2 月 3 日時点のオリジナルからアーカイブ。
- ^ Kaplan, Michael S. (2005-09-17). 「バックスラッシュがバックスラッシュでないのはいつですか?」
- ^ Kaplan, Michael S (2007-05-26). 「Unicode 以外の PUA」。すべてを整理する。
- ^ 「5. 索引(§索引jis0208)」。エンコード標準。WHATWG。
- ^ 「4.2. 名前とラベル」。エンコード標準。WHATWG。
- ^ a b c "JAPANESE.TXT: Map (external version) from Mac OS Japanese encoding to Unicode 2.1 and later". Apple Computer, Inc.; Unicode Consortium.
- ^ Lunde, Ken (2019-03-21). "A Brief History of Japan's Era Name Ligatures". CJK Type Blog. Adobe Inc.
- ^ "Encoding Variants for MacJapanese". Apple Developer Documentation. Apple.
- ^ Lunde, Ken (2008). "Appendix E: Vendor Character Set Standards" (PDF). CJKV Information Processing. O'Reilly Media. ISBN 9780596514471.
- ^ "JIS X 0213 Code Mapping Tables". x0213.org.
- ^ "JIS X 0213の代表的な符号化方式 § Shift_JIS-2004" (in Japanese). Hexadecimal numbers in the source have been converted to decimal for display.
- ^ Japanese Industrial Standards Committee (2004-04-13). Japanese Graphic Character Set for Information Interchange, Plane 1 (PDF). ITSCJ/IPSJ. ISO-IR-233.
- ^ "Index jis0208 visualization". Encoding Standard. WHATWG.
- ^ "Original Emoji from DoCoMo". FileFormat.info.
- ^ "Original Emoji from KDDI". FileFormat.info.
External links
- Shift-JIS Kanji Table – a table of the non-ASCII part of the codeset
- "Windows Codepage 932". Microsoft. May 1, 2005. Archived from the original on 2008-03-07. – Microsoft's definition
- Forms of Shift-JIS in ICU (International Components for Unicode)
- ibm-942 (sjis78)
- ibm-943 (contains the \u00A5 ↔ \x5C mapping)
- Shift JIS (contains the \u005C ↔ \x5C mapping)
