▼ ラスティブさん
> いま、CUnicode.cpp を変更しているのですが、
> 読み込みソースを const char* 型に指定して、
> 最後の半端な一バイトは一応、
> U+D800からU+D8FFまでに保存するようにしています。
あれれ?
別の文字コードからの読み書きで内部Unicodeに格納する際に変換不可文字をサロゲート片にマップするのは良いとして、Unicodeの読み書きでまで未定義文字をサロゲート片にマップしてます?
Unicode未定義文字は未定義文字として、無変換のまま内部Unicodeメモリに置くほうがいいんじゃないでしょうか。
例えば、現サクラでは未定義扱いだけどUnicode 5.1では定義済みの麻雀牌(U+1F000-U+1F02F)1文字が4個の不正文字に分離してエディタ画面に表示されるのは不自然だし(*1)、いろいろ扱いにくくなるんじゃないですか(*2)?なんか、こういう特殊扱いはバグの温床になりそうな、やな予感がするデス。(^^;;;
(*1) メモ帳で開いたら1文字なのにサクラで開くと4文字、とか。
(*2) クリップボードへのコピーでは4個の不正文字を1文字の麻雀牌に戻しておかないと正しいコードでメモ帳に貼り付かない、など、さまざまな処理でいちいち変換が必要になるかも。
ひょっとして、無変換だと奇数バイトサイズのファイルを同じサイズで保存できないから、という理由でそういう処理にしたのでしょうか?。でも、付加的な1バイトが増加するだけで、もともとのデータが保持されるなら、それは目を瞑ってもいいかなと思うんですけど。ANSI版だったらUnicode読み書きではバイナリは保持されなかったわけで、それと比べれば...、テキストの操作性に違和感が現われるまでのことをしてバイナリサイズ保持にこだわることはないと思います。
あと、'〓'表示にするのはせいぜい「非文字(Noncharacters)」として定義された66文字(*3)とサロゲート片だけにしておいて、未定義文字は従来どおり、あるがままの文字描画に任せたほうがいいかな、と思いました。麻雀牌がちゃんと麻雀牌として表示されるかどうかは別として。他エディタでもそうしてるような気がします。
(*3) 第00面から第16面までの各面の最後の2ポイント(U+nFFFE,U+nFFFF)およびU+FDD0-U+FDEF。
http://unicode.org/versions/Unicode4.0.0/ch15.pdf