MS_JIS2004 - NetDevInfraWGinOSSConsortium/NetDevInfraWiki GitHub Wiki

JIS2004関連

抂芁

JIS2004JIS X 0213:2004

  • JIS2004 は JIS X 0208:1997(いわゆる JIS97)を拡匵し、
    JIS 第䞉氎準文字・JIS 第四氎準文字を含む 4344 文字を远加した文字コヌド。
  • Windows Vista / Windows Server 2008以䞋、Vista/2008 ず略すでサポヌトされた。

補足本ペヌゞの読み方: 本ペヌゞは Windows Vista 移行期
20072009 幎頃の調査蚘録
であり、
「Vista で字が倉わった / 入力できる文字が増えた」こずぞの察応が䞻題である。

【圓時の状況】
   XP/2003 

 JIS90 のフォント・IME拡匵文字は入らない
   Vista/2008 
 JIS2004 のフォント・IME拡匵文字が入る★
     → 混圚環境で、文字が化ける字圢が違う入力できおしたう

【珟圚の状況】
   ・XP/2003/Vista/2008 はすべおサポヌト終了
   ・珟行の Windows は【すべお JIS2004 察応】
   ・したがっお「混圚」の問題は消えた

しかし、本ペヌゞが挙げる問題点のうち
問題点 3サロゲヌト ペア・結合文字が Length に圱響するず
問題点 4字圢が違うは、珟圚も珟圹の問題
である。
原文自身が「JIS2004 導入に斌ける特段新しい泚意点は問題点の䞀点だけ」
ず述べおおり、この芋立おは正確だった。

珟圚は、より広い範囲で同じ問題が起きおいる。

圓時 珟圚
JIS2004 の 304 字がサロゲヌト ペア 絵文字・拡匵挢字で日垞的にサロゲヌト ペアが来る
結合文字は IME パッドで意図的に入れた堎合 macOS/iOS 由来のデヌタが NFD で来る、絵文字の ZWJ 結合
察象は日本語の挢字 あらゆる蚀語・蚘号

぀たり、本ペヌゞの技術的な芁点は、察象を広げお今も通甚する。

問題

JIS2004 の導入の問題には以䞋のものがあるが、珟存するシステムの殆どは、
JIS2004 の導入前からキャラクタ セット、文字コヌドに぀いお同様の問題を持っおいる。
䟋えば、JIS X 0208 → JIS X 0212 時の補助挢字の远加、゚ンコヌディングの問題など。

  • このため、JIS2004 以降に、新たに JIS 挢字が远加された堎合も
    同様の方法で察凊するこずができるず考える。
  • たた、JIS2004 導入に斌ける特段新しい泚意点芳点は朱曞きにしおある。

※ ゚ンコヌドしないで入出力する堎合は、連携先で問題点、を解決すれば良い。
JIS2004 導入に斌ける特段新しい泚意点芳点は問題点の䞀点だけである。

移行メモ朱曞きに぀いお: 原文は「特段新しい泚意点は朱曞きにしおある」
ず述べおいるが、移行元のペヌゞに朱曞き赀文字は残っおいない。
文脈から、問題点 3 がそれに圓たるず読める
盎埌に「特段新しい泚意点は問題点の䞀点だけ」ずあるため。

拡匵文字セットの远加

JIS2004 拡匵文字のセットが 907 文字うち 304 文字がサロゲヌト ペア文字、远加された。
Vista/2008 以倖の珟行 OS は JIS2004 の拡匵文字セットに未察応
拡匵文字セットは、珟状、Vista/2008 の機皮䟝存文字ずなっおいる。

  • 問題点1:フォントが無い堎合、JIS2004 拡匵文字が衚瀺されない。
  • 問題点2:マシンの IMEが未察応の堎合、JIS2004 拡匵文字を入力できない。
  • 問題点3:サロゲヌト ペア文字・結合文字は、Length チェックなどに圱響を䞎える。

[参考]マむクロ゜フト サポヌト オンラむン > Windows Vista で拡匵された文字に぀いお
http://support.microsoft.com/kb/927488/ja

補足珟圚の問題点 1・2 の状況: 問題点 1・2 は解消した。

珟圚
フォント 珟行 Windows の MS ゎシック / 明朝 / 枞ゎシック / Meiryo は JIS2004 察応
IME 珟行の Microsoft IME は既定で拡匵文字を入力できる

ただし、フォントの問題は圢を倉えお残っおいる。

・Linux コンテナには日本語フォントが入っおいない
   → サヌバ偎で PDF/画像を䜜るず豆腐□になる
     [垳祚出力] 参照
・拡匵挢字CJK 拡匵 B 以降は、察応フォントが限られる
   → 枞明朝/枞ゎシックでも欠けおいる字がある
   → Windows の「BIZ UD」「MS 明朝」でも党郚は入っおいない
・Web フォントを䜿う堎合、サブセット化で萜ちる

問題点 3 は解消しおいない。以降で詳しく扱う。

暙準フォント デザむンの倉曎

字圢倉曎文字暙準フォントデザむンが倉曎が 168 字。

  • 問題点4:マシンによっおは、字圢倉曎文字の衚瀺や印刷が異なる。

補足168 字の字圢倉曎は珟圚も残る問題: これは
**「同じコヌドのたた、字の圢だけが倉わった」**ずいう倉曎である。

【䟋】
   U+9DD7「鎎」→「鷗」    ※ コヌドは同じ。フォントの描き方が倉わった
   U+845B「葛」            ※ 䞋郚が「匂」→「匃」
   U+8FBB「蟻」            ※ しんにょうの点が 1 ぀ → 2 ぀

 → デヌタは 1 ビットも倉わらない
 → 衚瀺・印刷だけが倉わる

なぜ厄介か:

・デヌタ䞊は「同じ文字」なので、システムでは怜出できない
・人名・地名では【字圢が本人の認識ず違う】こずが問題になる
・画面ず垳祚で違うフォントを䜿うず、【画面ず玙で字が違う】
・過去に印刷した垳祚ず、今日の垳祚で字が違う

珟圚の察凊:

手段 内容
フォントを固定する 党端末・党プリンタで同じフォントを指定する最も確実
IVS を䜿う 異䜓字セレクタで字圢を明瀺JIS文字挢字コヌド
JIS90 互換フォント 珟圚は提䟛されおいない埌述
倖字 最埌の手段Windowsの倖字

IVS が本来の解である。

葛 (U+845B)              
 フォント任せJIS2004 字圢になる
葛 (U+845B U+E0100)      
 【明瀺的に旧字圢を指定】

ただし、IVS 察応フォントず、IVS を扱えるアプリケヌションが芁る。
DB では2 文字分4 バむトを消費する点にも泚意する。

゚ンコヌディングの問題

゚ンコヌディング凊理に問題がある可胜性がある。

  • 問題点5:他の環境ぞ(Unicode からそれ以倖の文字コヌドに)゚ンコヌド出力できない可胜性。
  • 問題点6:他の環境から(Unicode からそれ以倖の文字コヌドに)゚ンコヌド入力できない可胜性。

移行メモ問題点 6 の括匧曞きが問題点 5 ず同じ: 問題点 6 は
**「それ以倖の文字コヌドから Unicode に」**が正しいず読める
「入力」であるため。原文の括匧内が問題点 5 ず同文になっおいる。

補足: この 2 ぀は、文字のチェック方匏 の
「可逆チェック」で怜出できる
問題である。

Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
var cp932 = Encoding.GetEncoding(932);

// 問題点5 送れるか
bool canSend = cp932.GetString(cp932.GetBytes(s)) == s;

"𠮟る".Length;                 // 3サロゲヌト ペア + 1
canSend                        // false ← CP932 に 𠮟 がない

連携先が CP932 しか受けられない堎合の蚭蚈:

① 入力時に怜査しお匟く利甚者にその堎で䌝える
② 保存はするが、連携時に代替文字ぞ眮換する芁業務合意
③ 連携先を UTF-8 察応にしおもらう ★ 本筋

② の「代替文字ぞの眮換」は業務刀断が芁る。
「𠮟」→「叱」のような眮換は、別の字にするこずであり、
氏名では蚱されない堎合が倚い。

察応方法

JIS2004に察応させる

  • 以䞋は、Windows OS での察応方法。
  • Mac、UNIX、Linux、その他携垯端末などの他機皮に぀いおも同様に調査が必芁。
  • ただし、文字の衚瀺が䞍芁なサヌバ OS に぀いおは調査䞍芁
    ゚ンコヌディングの問題が起きない堎合。

JIS2004 察応の日本語フォントのむンストヌル

Windows XP / Windows Server 2003以䞋、XP/2003 ず略すでも、
パッチさえ圓おれば、JIS2004 に察応した日本語フォントを利甚可胜になる。

  • Windowsホヌム > 補品情報 > Windows Vista
    JIS X 0213 : 2004 察応ず新日本語フォント「メむリオ」に぀いお
    XP / 2003向けJIS2004察応 MSゎシック & MS明朝 フォントパッケヌゞに぀いお
    リンク切れhttp://www.microsoft.com/japan/windows/products/windowsvista/jp_font/jis04/default.mspx

  • マむクロ゜フト > ダりンロヌド センタヌ > XP向けClearType察応日本語フォント
    リンク切れダりンロヌド センタヌの圓該ペヌゞは提䟛終了

フォントをむンストヌルしたら、フォントを䜿甚できるアプリケヌションで確認する。
フォントを䜿甚のに蚭定が必芁なアプリケヌションもあるし、
フォントを䜿甚できないアプリケヌションもある

移行メモリンクは提䟛終了: 本節が案内する
XP/2003 向けの远加フォント パッケヌゞは、珟圚提䟛されおいない
XP/2003 のサポヌトが終了しおいるため。
URL も 404 になるため、䞊蚘ではリンクを倖しお蚘録のみ残した。

珟行の Windows では、远加むンストヌルなしで JIS2004 に察応枈みである。

JIS2004 察応の IMEのむンストヌル

  • Office2007に同梱される IME2007をむンストヌルするこずで、
    XP/2003 でも JIS2004 の拡匵文字セットの文字入力が可胜になる。
    Office2007 はむンタヌネットから、詊甚版無料で 60 日詊甚可胜がダりンロヌドできる。

  • ちなみに、IME2007 のみをむンストヌルした状態では、フォントがないため、
    IME が入力したデヌタを参照するこずができないず蚀う珟象が発生する。
    この堎合、前述の手順に埓い、JIS2004 に察応した日本語フォントをむンストヌルするこずで、
    この問題を解決する。

補足「入力はできるが芋えない」珟象: 原文が蚘録しおいる
**「IME だけ入れるずデヌタが芋えない」**ずいう珟象は、
フォントず文字コヌドが独立しおいるこずをよく瀺しおいる。

【入力できる】 

 IME が拡匵文字を倉換候補に出せるか
【保存できる】 

 アプリず DB が Unicode を扱えるか
【衚瀺できる】 

 フォントにその字のグリフがあるか
【印刷できる】 

 プリンタ/PDF にフォントが埋め蟌たれるか

  → この 4 ぀は【別々の条件】であり、どれか 1 ぀でも欠けるず
     「文字化け」に芋える

障害切り分けの際は、この 4 段階を分けお確認する。
特に**「衚瀺できないが、デヌタは正しい」**ケヌスを
デヌタの砎損ず誀蚺しお、正しいデヌタを壊しおしたう事故が倚い。

JIS90の蚭定に戻す

  • Vista/2008 では、JIS2004 に察応した日本語フォントを搭茉しおいる。
    䞀郚の文字168 字で暙準フォント デザむンが倉曎されるため、
    人名、地名など字圢に敏感なシステムには圱響が出る可胜性がある
    この圱響ずは、顧客芁件に因るずころが倧きい。

    • [参考]:Windowsホヌム > 補品情報 > Windows Vista > JIS2004 察応ず新日本語フォント「メむリオ」に぀いお
      リンク切れ提䟛終了
    • [参考]:CyberLibrarian図曞通員のコンピュヌタ基瀎講座参考資料> 参考資料 > JIS2004制定時の倉曎点  印刷暙準字䜓に倉曎したもの168字
      http://www.asahi-net.or.jp/~ax2s-kmtn/ref/jis2000-2004.html
  • これを問題ず捉えるならば、Vista/2008 のフォント、IME を JIS90 に察応させる必芁がある。
    たた、このような問題は、画面䞊の衚瀺だけでなく、垳祚印刷プリンタなども含む。

    • [参考]:マむクロ゜フト サポヌト オンラむン > フォントなどの JIS2004 文字セットをサポヌトする
      ドキュメントを Vista/2008 で印刷するず、
      デバむス フォントを䜿甚するようにプリンタが構成されおいおも
      ドキュメントが TrueType フォントで印刷されるこずがある。
      http://support.microsoft.com/kb/931478/ja

日本語フォントをJIS90 察応のフォントに倉曎

Vista/2008 で 2000/XP 互換フォントを利甚する堎合、
2000/XP ず同じデザむンの JIS90 互換 MS ゎシック・明朝フォントが
ダりンロヌド提䟛されおいるのでこれをむンストヌルする。

[参考]:Windowsホヌム > 補品情報 > Windows Vista
JIS X 0213:2004 察応ず新日本語フォント「メむリオ」に぀いお
Vista / 2008向けJIS90互換MSゎシック・明朝フォントパッケヌゞに぀いお
リンク切れ提䟛終了

Vista/2008 で JIS90 互換 MS ゎシック・明朝フォントをむンストヌルする前、
むンストヌルした埌で、「鰯」などの文字のフォント デザむンが以䞋のように倉曎される。

日本語フォントをJIS90 察応のフォントに倉曎

補足JIS90 互換フォントは珟圚入手できない: この察凊は
珟圚は取れない
。

・JIS90 互換 MS ゎシック・明朝パッケヌゞは【提䟛終了】
   Vista/2008 向けであり、察象 OS がサポヌト終了
・珟行 Windows で「JIS90 の字圢に戻す」公匏手段はない

珟圚、字圢を制埡したい堎合の遞択肢:

手段 内容
IVS を䜿う 異䜓字セレクタで字圢を明瀺。本筋の解
字圢を持぀フォントを指定する BIZ UD 明朝、枞明朝、モリサワ等の商甚フォント
倖字フォントを䜜る 最埌の手段。運甚負荷が高い
画像で持぀ 垳祚の䞀郚だけ画像化限定的な甚途

「字圢が違う」を問題ずするかは業務刀断であるずいう
原文の指摘「顧客芁件に因るずころが倧きい」は今も本質的である。
技術的に完璧を目指すずコストが跳ね䞊がるため、
どこたで求めるかを先に合意する。

Vista/2008の IMEをJIS90に蚭定

Vista/2008 の IME 蚭定を倉曎するこずで
JIS2004 の拡匵文字セットの入力を犁止するこずができる。

Vista/2008 向け JIS90 互換 MS ゎシック・明朝フォントパッケヌゞのむンストヌル埌、
日本語入力 IME での倉換察象を「JIS90」に限定する蚭定をするこずで、
拡匵文字セット入力を䞍可胜にするこずができる。

蚀語バヌにある、プロパティから、[Microsoft IME のプロパティ]ダむアログを起動、
[倉換]タブの[倉換文字制限]ボタンを抌䞋し、
[Microsoft IME 倉換文字制限]ダむアログで
[JISX0208 文字で構成された単語/文字のみ倉換候補に衚瀺する]チェック ボタンをオンにしお、
OKボタンを回抌䞋しお元に戻る。

日本語フォントをJIS90 察応のフォントに倉曎Vista/2008

䞊蚘の JIS2004 の拡匵文字セット入力を䞍可胜にする蚭定を”する前”ず、”した埌”の比范を以䞋に瀺す。
確かに、JIS2004 の拡匵文字セットを入力できなくなっおいる。

JIS90に察応したIME蚭定に倉曎した結果Vista/2008

[参考]:マむクロ゜フト サポヌト オンラむン > Vista/2008でIMEの倉換候補に衚瀺する文字を制限する方法
http://support.microsoft.com/kb/934715/ja

JIS90 察応の IMEのむンストヌル

たた、XP/2003 で Office2007に同梱される IME2007をむンストヌルしお、
JIS2004 の拡匵文字セットの文字入力が可胜にした堎合も、
IME 蚭定を倉曎するこずで JIS2004 の拡匵文字セットの入力を犁止するこずができる。

蚀語バヌにある、プロパティから、[Microsoft Office IME 2007 のプロパティ]ダむアログを起動、
[倉換]タブの[詳现蚭定]ボタンを抌䞋し、
[倉換]ダむアログで[JISX0208 文字で構成された単語/文字のみ倉換候補に衚瀺する]
オプション ボタンをオンにしお、OKボタンを回抌䞋しお元に戻る。

日本語フォントをJIS90 察応のフォントに倉曎XP/2003

䞊蚘の JIS2004 の拡匵文字セット入力を䞍可胜にする蚭定をする前ず、した埌の比范を以䞋に瀺す。
確かに、JIS2004 の拡匵文字セットを入力できなくなっおいる。

JIS90に察応したIME蚭定に倉曎した結果XP/2003

補足IME での入力制限は珟圚も蚭定できるが、意味が薄れた: 珟行の
Microsoft IME にも同等の蚭定はある。

蚭定 → 時刻ず蚀語 → 蚀語ず地域 → 日本語 → 蚀語のオプション
  → Microsoft IME → 党般 → 倉換候補の文字セット制限
      ・制限しない
      ・JIS X 0208 のみ ★
      ・JIS X 0213 のみ

しかし、この察策の有効性は倧きく䞋がっおいる。

【IME 制限が効かない入力経路】
   ・コピヌペヌストIME を経由しない★
   ・Web フォヌムブラりザ経由。IME 制限は効くが端末䟝存
   ・スマヌトフォンWindows の IME 蚭定ず無関係
   ・CSV/Excel 取り蟌み、API 連携、OCR
   ・端末ごずの蚭定なので、【党端末を管理できないず穎が残る】

**したがっお、珟圚の正しい蚭蚈は
「入力を IME で止める」ではなく「アプリケヌション偎で怜査する」**である。

// 入力チェックサヌバ偎で必ず行う
if (!IsRoundTrippable(input, 932))
    return Error("登録できない文字が含たれおいたす ");

クラむアント偎の制限は補助であり、
サヌバ偎の怜査が唯䞀の保蚌——
ずいう、入力怜蚌䞀般の原則がそのたた圓おはたる。

サロゲヌト ペア文字、結合文字

  • UTF-8、UTF-16 で衚珟可胜
  • Shift-JIS、EUC-JP、Big5 などでは衚珟できない

サロゲヌト ペア文字

远加された JIS2004 拡匵文字のセット、907 文字のうち 304 文字がサロゲヌト ペア文字である。
サロゲヌト ペア文字のこずを、サロゲヌトコヌド、補助文字ずも呌ぶ。

サロゲヌト ペア文字は 4 バむトで衚珟される。

補足「4 バむト」の意味: 文脈によっお倀が倉わるため補足する。

衚珟 バむト数
UTF-16.NET の string の内郚 4 バむトchar 2 個← 原文はこれ
UTF-8 4 バむト偶然䞀臎する
UTF-32 4 バむト
CP932 / EUC-JP 衚珟できない
𠮟 (U+20B9F)
   UTF-16: D8 42 DF 9F  サロゲヌト ペア D842 + DF9F
   UTF-8 : F0 A0 AE 9F

string.Length が 2 を返すのは UTF-16 の単䜍数を数えるためである
文字のチェック方匏。

U+2000B:𠀋 U+2123D:𡈜 U+2131B:𡌛 U+2146E:𡑮 U+218BD:𡢜 U+20B9F:𠮟 U+216B4:𡚎
U+21E34:𡞎 U+231C4:𣇄 U+235C4:𣗄 U+2373F:𣜿 U+23763:𣝣 U+23CFE:𣳟 U+247F1:ð€Ÿ±
U+2548E:𥒎 U+2550E:𥔎 U+25771:𥝱 U+259C4:𥧄 U+25DA1:𥶡 U+26AFF:ðŠ«¿ U+26E40:ðŠ¹€
U+270F4:𧃎 U+27684:𧚄 U+28277:𚉷 U+283CD:𚏍 U+2A190:𪆐 U+20089:𠂉 U+200A2:𠂢
U+200A4:ð ‚€ U+201A2:𠆢 U+20213:𠈓 U+2032B:𠌫 U+20381:𠎁 U+20371:𠍱 U+203F9:𠏹
U+2044A:𠑊 U+20509:𠔉 U+205D6:𠗖 U+20628:𠘚 U+2074F:𠝏 U+20807:𠠇 U+2083A:ð  º
U+208B9:ð ¢¹ U+2097C:𠥌 U+2099D:𠊝 U+20AD3:𠫓 U+20B1D:𠬝 U+20D45:𠵅 U+20DE1:ð ·¡
U+20E95:𠺕 :ð ¹­ U+20E64:ð ¹€ U+20F5F:𠜟 U+21201:𡈁 U+21255:𡉕 U+2127B:𡉻
U+21274:𡉎 U+212E4:ð¡‹€ U+212D7:𡋗 U+212FD:ð¡‹œ U+21336:𡌶 U+21344:𡍄 U+213C4:𡏄
U+2146D:𡑭 U+215D7:𡗗 U+26C29:ðŠ°© U+21647:𡙇 U+21706:𡜆 U+21742:𡝂 U+219C3:𡧃
U+21C56:𡱖 U+21D2D:𡎭 U+21D45:𡵅 U+21D78:𡵞 U+21D62:𡵢 U+21DA1:ð¡¶¡ U+21D9C:𡶜
U+21D92:𡶒 U+21DB7:ð¡¶· U+21DE0:ð¡·  U+21E33:𡞳 U+21F1E:𡌞 U+21F76:𡜶 U+21FFA:𡿺
U+2217B:𢅻 U+2231E:𢌞 U+223AD:𢎭 U+226F3:𢛳 U+2285B:𢡛 U+228AB:𢢫 U+2298F:𢊏
U+22AB8:𢪞 U+22B4F:𢭏 U+22B50:𢭐 U+22B46:𢭆 U+22C1D:𢰝 U+22BA6:𢮊 U+22C24:𢰀
U+22DE1:𢷡 U+231C3:𣇃 U+231F5:𣇵 U+231B6:𣆶 U+23372:𣍲 U+233D3:𣏓 U+233D2:𣏒
U+233D0:𣏐 U+233E4:𣏀 U+233D5:𣏕 U+233DA:𣏚 U+233DF:𣏟 U+2344A:𣑊 U+23451:𣑑
U+2344B:𣑋 U+23465:𣑥 U+234E4:𣓀 U+2355A:𣕚 U+23594:𣖔 U+23639:𣘹 U+23647:𣙇
U+23638:𣘞 U+2363A:𣘺 U+2371C:𣜜 U+2370C:𣜌 U+23764:𣝀 U+237FF:𣟿 U+237E7:𣟧
U+23824:𣠀 U+2383D:𣠜 U+23A98:𣪘 U+23C7F:𣱿 U+23D00:𣎀 U+23D40:𣵀 U+23DFA:𣷺
U+23DF9:𣷹 U+23DD3:𣷓 U+23F7E:𣜟 U+24096:ð€‚– U+24103:ð€„ƒ U+241C6:ð€‡† U+241FE:ð€‡Ÿ
U+243BC:ð€ŽŒ U+24629:ð€˜© U+246A5:ð€š¥ U+24896:ð€¢– U+24A4D:ð€© U+24B56:ð€­– U+24B6F:ð€­¯
U+24C16:ð€°– U+24D14:ð€Ž” U+24E0E:ð€žŽ U+24E37:ð€ž· U+24E6A:ð€¹ª U+24E8B:ð€º‹ U+2504A:𥁊
U+25055:𥁕 U+25122:𥄢 U+251A9:𥆩 U+251E5:𥇥 U+251CD:𥇍 U+2521E:𥈞 U+2524C:𥉌
U+2542E:𥐮 U+254D9:𥓙 U+255A7:𥖧 U+257A9:𥞩 U+257B4:𥞎 U+259D4:𥧔 U+25AE4:𥫀
U+25AE3:𥫣 U+25AF1:𥫱 U+25BB2:𥮲 U+25C4B:𥱋 U+25C64:𥱀 U+25E2E:𥞮 U+25E56:𥹖
U+25E65:𥹥 U+25E62:𥹢 U+25ED8:𥻘 U+25EC2:𥻂 U+25EE8:𥻚 U+25F23:𥌣 U+25F5C:𥜜
U+25FE0:𥿠 U+25FD4:𥿔 U+2600C:ðŠ€Œ U+25FFB:𥿻 U+26017:ðŠ€— U+26060:ðŠ  U+260ED:ðŠƒ­
U+26270:ðŠ‰° U+26286:ðŠŠ† U+2634C:ðŠŒ U+23D0E:𣎎 U+26402:ðŠ‚ U+2667E:ðŠ™Ÿ U+266B0:ðŠš°
U+2671D:ðŠœ U+268DD:ðŠ£ U+268EA:ðŠ£ª U+26951:ðŠ¥‘ U+2696F:ðŠ¥¯ U+269DD:ðŠ§ U+26A1E:ðŠšž
U+26A58:ðŠ©˜ U+26A8C:ðŠªŒ U+26AB7:ðŠª· U+26C73:ðŠ±³ U+26CDD:ðŠ³ U+26E65:ðŠ¹¥ U+26F94:ðŠŸ”
U+26FF8:ðŠ¿ž U+26FF6:ðŠ¿¶ U+26FF7:ðŠ¿· U+2710D:𧄍 U+27139:𧄹 U+273DB:𧏛 U+273DA:𧏚
U+273FE:𧏟 U+27410:𧐐 U+27449:𧑉 U+27615:𧘕 U+27614:𧘔 U+27631:𧘱 U+27693:𧚓
U+2770E:𧜎 U+27723:𧜣 U+27752:𧝒 U+27985:ð§Š… U+27A84:𧪄 U+27BB3:ð§®³ U+27BBE:𧮟
U+27BC7:𧯇 U+27CB8:𧲞 U+27DA0:ð§¶  U+27E10:𧞐 U+27FB7:ð§Ÿ· U+2808A:𚂊 U+280BB:ðš‚»
U+28282:𚊂 U+282F3:𚋳 U+2840C:𚐌 U+28455:ðš‘• U+2856B:ðš•« U+285C8:ðš—ˆ U+285C9:ðš—‰
U+286D7:ðš›— U+286FA:𚛺 U+28949:𚥉 U+28946:𚥆 U+2896B:𚥫 U+28987:𚊇 U+28988:𚊈
U+289BA:𚊺 U+289BB:𚊻 U+28A1E:ðššž U+28A29:ðšš© U+28A71:𚩱 U+28A43:𚩃 U+28A99:𚪙
U+28ACD:𚫍 U+28AE4:𚫀 U+28ADD:𚫝 U+28BC1:𚯁 U+28BEF:𚯯 U+28D10:𚎐 U+28D71:𚵱
U+28DFB:ðš·» U+28E1F:𚞟 U+28E36:ðšž¶ U+28E89:𚺉 U+28EEB:𚻫 U+28F32:𚌲 U+28FF8:𚿞
U+292A0:𩊠 U+292B1:𩊱 U+29490:𩒐 U+295CF:𩗏 U+2967F:𩙿 U+296F0:𩛰 U+29719:𩜙
U+29750:𩝐 U+298C6:𩣆 U+29A72:ð©©² U+29DDB:𩷛 U+29E3D:𩞜 U+29E15:𩞕 U+29E8A:𩺊
U+29E49:𩹉 U+29EC4:𩻄 U+29EE9:𩻩 U+29EDB:𩻛 U+29FCE:𩿎 U+2A02F:𪀯 U+2A01A:𪀚
U+2A0F9:𪃹 U+2A082:𪂂 U+22218:𢈘 U+2A38C:𪎌 U+2A437:𪐷 U+2A5F1:𪗱 U+2A602:𪘂
U+2A61A:𪘚 U+2A6B2:𪚲

移行メモ衚の字数は 303: 本文は「304 文字がサロゲヌト ペア文字」ず述べおいるが、\n> 実際の衚に含たれるのは 303 字である重耇なし。\n> 移行元の衚が 1 字欠けおいるものず思われる。\n> たた、U+20E6D のセルはコロンが抜けおいたため、他ず揃えた。

結合文字

結合文字のこずを、結合枈み文字、合成文字、合成枈み文字ずも呌ぶ。

結合文字は 4 バむト以䞊で衚珟される。

結合文字は、蚀語バヌにある、IME パッドから、「ふ」「゚」「ぷ」ず入力するこずで、
入力できる。䞋蚘の図は、通垞の文字の「ぷ」ず、結合文字の「ぷ」を入力したずころ。

結合文字の入力

たた結合文字は、瞊曞きにするず、正しく結合されないずいう問題がある。

結合文字の瞊曞き

移行メモ甚語の敎理: 原文は「結合文字」の別名ずしお
「結合枈み文字、合成文字、合成枈み文字」を挙げおいるが、
Unicode の甚語では「結合」ず「合成枈み」は逆の抂念であるため、
敎理しおおく。

甚語 意味
結合文字Combining Character 単独では䜿わない付加蚘号。U+3099濁点、U+309A半濁点等
結合文字列Combining Sequence 基底文字 + 結合文字。「ふ」+「゚」の 2 文字
合成枈み文字Precomposed 1 文字で衚せるもの。「ぷ」U+3077
「ぷ」には 2 通りの衚珟がある
   ① U+3077          合成枈み1 char★ 通垞はこちら
   ② U+3075 U+309A   結合文字列2 char← 原文の実隓で䜜ったもの

   → 芋た目は同じ。バむト列は違う。比范するず【䞀臎しない】

原文が「結合文字」ず呌んでいるのは ② の結合文字列である。

察策は正芏化である文字のチェック方匏。

"ぷ".Normalize(NormalizationForm.FormC);   // ② → ① に統䞀される

「瞊曞きで結合されない」問題は、
フォントずレンダリング ゚ンゞンの実装䟝存であり、
珟圚も環境によっおは再珟する
瞊曞きは Word、InDesign、CSS の writing-mode 等で扱いが異なる。
合成枈み文字に正芏化しおおけば起きないため、
ここでも正芏化が有効である。

文字の扱いの違い

API や DBMS の䜿い方によっお、

  • 1 文字ずしお扱えるか
  • 2 バむト毎にバラバラに扱うか

動䜜が倉わる。

以䞋に䞀䟋を瀺す。

.NET FrameworkのAPI

  • System.Globalization.StringInfo は、文字ず認識する。
  • System.String は、文字ず認識しない。

SQL Serverの照合順序

  • Japanese_90, Japanese_100 は、文字ず認識する。
  • Japanese は、文字ず認識しない。

Oracleの郚分怜玢

  • LIKEC は、文字ず認識する。
  • LIKE は、文字ず認識しない。

補足この節が本ペヌゞの栞心: 原文が挙げるこの 3 ぀の察比は、
**「どの局でも同じ問題が起きる」**こずを瀺しおおり、
珟圚もそのたた通甚する。珟圚の情報で曎新する。

① .NET

API サロゲヌト ペア 結合文字列
string.Length 2 ず数える 2 ず数える
foreach (char c in s) 分解される 分解される
Rune / EnumerateRunes() 1 ず数える 2 ず数える別のコヌドポむント
StringInfo.LengthInTextElements 1 ず数える 1 ず数える ★
Substring 壊れ埗る 壊れ埗る
SubstringByTextElements 安党 安党

Rune ず StringInfo の違いに泚意する。
Rune はコヌドポむント単䜍、
StringInfo は曞蚘玠クラスタ芋た目の 1 文字単䜍である。

② SQL Server

照合順序 サロゲヌト ペア
Japanese_CI_AS 1 文字ずしお扱わない
Japanese_90_CI_AS / Japanese_XJIS_100_CI_AS 扱う
*_SCSupplementary Character 察応 正しく扱う ★
*_UTF8SQL Server 2019 UTF-8 の varchar
-- 珟圚の掚奚
ALTER DATABASE MyDb COLLATE Japanese_XJIS_140_CI_AS_SC;
--                                                 ↑ SC が肝

SELECT LEN(N'𠮟る');   -- SC なし: 3 / SC あり: 2

_SC が付いおいないず、LEN / SUBSTRING / CHARINDEX が
サロゲヌト ペアを 2 文字ずしお数える

SQL Server。

列の型も重芁である。

varchar  
 コヌドペヌゞ䟝存。【CP932 の範囲しか入らない】
nvarchar 
 UTF-16。【拡匵文字が入る】★
varchar + UTF-8 照合順序2019  UTF-8 で栌玍。ASCII 䞻䜓なら省容量

③ Oracle

LIKECC は Characterはコヌドポむント単䜍で比范する。
同様に LENGTHC / SUBSTRC / INSTRC がある。

SELECT LENGTH('𠮟る')  FROM dual;  -- 3コヌド単䜍
SELECT LENGTHC('𠮟る') FROM dual;  -- 2コヌドポむント

蚭蚈䞊の指針:

・DB の文字数制限は【䜕を数えおいるか】を確認する
    → VARCHAR2(10 CHAR) ず VARCHAR2(10 BYTE) は別物
・画面の「10 文字たで」ず DB の「10 文字」を䞀臎させる
    → 画面は曞蚘玠、DB はコヌドポむントや UTF-16 単䜍
    → 【厳しい方に合わせる】か、明瀺的に換算する
・切り詰めtruncateは【必ず文字単䜍の API を䜿う】
    → バむト単䜍・char 単䜍で切るず壊れた文字ができる

参考

Microsoft Learn


Tags: 移行, .NET開発, 囜際化察応, 文字コヌド

⚠ **GitHub.com Fallback** ⚠