<html xmlns="http://www.w3.org/1999/xhtml"><head></head><body><section><h1><code>wchar_t</code> データ型</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="1" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[1]</anchor-end> <cite xml:lang="ja-jp">wchar_t ‐ 通信用語の基礎知識</cite>, <time>2022-05-01T02:20:13.000Z</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://www.wdic.org/w/TECH/wchar_t">https://www.wdic.org/w/TECH/wchar_t</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="2" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[2]</anchor-end> <cite xml:lang="ja">ワイド文字 - Wikipedia</cite>, <time>2022-04-17T02:16:55.000Z</time>, <time>2022-05-01T02:20:31.000Z</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://ja.wikipedia.org/wiki/%E3%83%AF%E3%82%A4%E3%83%89%E6%96%87%E5%AD%97">https://ja.wikipedia.org/wiki/%E3%83%AF%E3%82%A4%E3%83%89%E6%96%87%E5%AD%97</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="9" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[9]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">CSI<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">Code Set Independent</title></anchor></p></section><section><h1><code>wchar_t</code> 符号化文字集合</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="6" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[6]</anchor-end> 
<code>wchar_t</code> における<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">符号</anchor>と<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字</anchor>の対応関係は実装依存です。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="7" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[7]</anchor-end> 
次のようなものがあります。</p><ul><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="8" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[8]</anchor-end> 完全に独自のもの</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="10" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[10]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">UCS-4</anchor> ≒ <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">UTF-32</anchor></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="11" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[11]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">UCS-2</anchor>, <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">UTF-16</anchor></li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="12" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[12]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">固定長EUC</anchor>各種</li><li><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="21" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[21]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Arena wchar</anchor></li></ul><figure class="quote"><figcaption><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="3" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[3]</anchor-end> <cite xml:lang="ja">文字および文字列の処理 - Oracle Solaris でのアプリケーションの国際化とローカライズ</cite>
(<time>2017-06-02T20:02:22.000Z</time>, <time>2022-05-01T02:22:03.072Z</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://docs.oracle.com/cd/E62101_01/html/E62868/gmwke.html">https://docs.oracle.com/cd/E62101_01/html/E62868/gmwke.html</anchor-external></figcaption><blockquote><p>Oracle Solaris では、wchar_t の内部形式はロケール固有です。Oracle Solaris の Unicode ロケールでは、wchar_t は UTF-32 Unicode エンコード形式を使用し、その他のロケールは別の表現を使用します。</p></blockquote></figure><figure class="quote"><figcaption><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="4" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[4]</anchor-end> <cite xml:lang="ja-JP">C および C++ 組み込み SQL アプリケーションにおける日本語または中国語 (繁体字) EUC、および UCS-2 に関する考慮事項 - IBM Documentation</cite>
(<time>2022-05-01T02:23:21.000Z</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://www.ibm.com/docs/ja/db2/11.1?topic=hvicc-japanese-traditional-chinese-euc-ucs-2-considerations-in-c-c">https://www.ibm.com/docs/ja/db2/11.1?topic=hvicc-japanese-traditional-chinese-euc-ucs-2-considerations-in-c-c</anchor-external></figcaption><blockquote><p>wchar_t エンコード方式が 2 バイト Unicode のクライアント環境 (例えば Windows 2000 または AIX® バージョン 5.1 以上) の場合には、NOCONVERT オプションを使用して直接 UCS-2 で作業できます。</p></blockquote></figure><figure class="quote"><figcaption><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="5" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[5]</anchor-end> <cite xml:lang="ja">EUC(5) - ファイルフォーマット - YOS OPENSONAR</cite>
(<time>2022-05-01T02:25:25.000Z</time>)
<anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="http://www.yosbits.com/opensonar/rest/man/freebsd/man/ja/man5/euc.5.html?l=ja">http://www.yosbits.com/opensonar/rest/man/freebsd/man/ja/man5/euc.5.html?l=ja</anchor-external></figcaption><blockquote><p>EUC マルチバイト文字の wchar_t エンコーディングは、 len および mask 引数に依存します。先ず、以下のように wchar_t にバイトが移動されます:</p><p>byte0 &lt;&lt; ((lenN-1) * 8) | byte1 &lt;&lt; ((lenN-2) * 8) | ... | bytelenN-1</p><p>その結果はそれから ~mask と AND をとられ、 maskN と OR をとられます。コードセット 2 と 3 は特殊で、前のバイト (0x8e または 0x8f) が最初に取り除かれ lenN 引数が 1 減少させられます。</p></blockquote></figure></section><section><h1>歴史</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="22" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[22]</anchor-end> <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">DIS 10646</anchor></p><section><h1>ISO 2022 wchar_t encoding</h1><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="13" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[13]</anchor-end> 
<cite xml:lang="en">ISO 2022 wchar_t encoding</cite>, 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Markus Kuhn</anchor>,
created 2001-06-16 – last modified 2001-06-26,
<time>2006-02-12T16:40:58.000Z</time>, <time>2022-05-01T02:29:42.333Z</time> <anchor-external xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resScheme="URI" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:resParameter="https://www.cl.cam.ac.uk/~mgk25/ucs/iso2022-wc.html">https://www.cl.cam.ac.uk/~mgk25/ucs/iso2022-wc.html</anchor-external></p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="14" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[14]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">21世紀</anchor>初頭の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Unicode</anchor> への移行が徐々に始まった時代に提案されたもの。
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">著者</anchor>は <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Unicode推進<title xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:10:">Unicoder</title></anchor>、アンチ <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ISO/IEC 2022</anchor>
で当時有名 (悪名?) だった人。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="15" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[15]</anchor-end> 
題名に <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ISO 2022</anchor> と書いてあるが、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ISO/IEC 2022</anchor> とはあまり関係ない。
当時の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">東アジア</anchor> (主に<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">日本</anchor>) では <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ISO/IEC 2022</anchor>
の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">符号化文字集合</anchor>の違いが<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">フォント</anchor>の選択
<weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(によって誤魔化されていた<anchor>漢字統合</anchor>の問題)</weak>
や<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">文字幅</anchor>
(<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">半角</anchor> vs <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">全角</anchor>) の決定に影響していたので、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ISO/IEC 2022</anchor> を捨てて <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Unicode</anchor> に移行させるためには
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ISO/IEC 2022</anchor> における<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">指示シーケンス</anchor>の情報を
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Unicode文字</anchor>に付与すればいいのでは、という誤解に基づき設計されている.</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="16" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[16]</anchor-end> 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ISO 2022 wchar_t encoding</anchor> では 
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ISO/IEC 10646</anchor> の <code>U+0000</code> - <code>U-07FFFFFF</code> はそのまま使える。
(<code>U-08000000</code> - <code>U-7FFFFFFF</code> は表現不能。)
それに加えて、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ISO/IEC 10646</anchor> の <code>U+0000</code> - <code>U+3FFFFF</code> は、
上位数ビットに特定の値を加えた形でも使える。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="17" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[17]</anchor-end> 
その特定の値が、 <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ISO/IEC 2022</anchor> における<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">符号化図形文字集合</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">指示シーケンス</anchor>の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">中間バイト</anchor>や<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">終端バイト</anchor>である。
従って元が <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">JIS X 0208</anchor> だったか <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">GB 2312</anchor> だったか <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ISO/IEC 8859</anchor> だったか区別できる、
という仕組み。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="18" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[18]</anchor-end> 
あくまで<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">往復変換</anchor>のために元の<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">符号化文字集合</anchor>が何だったか記録するだけで、
下位ビットは相当する <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Unicode</anchor> の文字に置き換えないといけない。
従って当時まだ多かった <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Unicode</anchor> 嫌悪派の受けが良いはずがないし、
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ISO/IEC 2022</anchor> との相互変換時の <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Unicode</anchor> 文字との変換表が必要なことはただの
<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Unicode</anchor> への変換と変わらないし
<weak xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">(その点が<anchor>固定長EUC</anchor>のようなものとは違う)</weak>、
その変換表が実装によって違うことに起因する<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">相互運用性</anchor>の問題の解決にもならない。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="19" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[19]</anchor-end> 
そこまでしてなぜ <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Unicode</anchor> に変換する必要があるのかというとそれは <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Unicode</anchor>
を使うためなのだろう。当時まだ勢力があった <anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">ISO/IEC 2022</anchor> 
派を懐柔するなにかの改善ないし譲歩のように見えながら、
その真逆をいっているので、神経を逆撫でするようなものだったのでは。</p><p><anchor-end xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:" a0:anchor="20" xmlns:a0="urn:x-suika-fam-cx:markup:suikawiki:0:9:">[20]</anchor-end> 
別案として示されている<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Unicode言語タグ</anchor>を使用する案は、
本人も書いている通り考慮する価値すらない。
ならなぜそんな案を示しているんだという感じもするが、
当時は<anchor xmlns="urn:x-suika-fam-cx:markup:suikawiki:0:9:">Unicode言語タグ</anchor>に期待が寄せられていたらしいので、
触れておきたかったのだろうか。</p></section></section><section><h1>メモ</h1></section></body></html>