ちゃっぴの監禁部屋

ガチガチに締めすぎて動きがとれなくなる。。。

ホーム 連絡をする 同期する ( RSS 2.0 ) Login
投稿数  405  : 記事  5  : コメント  12059  : トラックバック  134

ニュース

記事カテゴリ

書庫

日記カテゴリ

Communities

Personal Information

とりあえず、一発目がなぜこのネタなのか?ってのは置いておいて。。。

Vista で Unicode の surrogates pair を容易に扱えるようになったのでその検証。

MSDN だと下記で解説されているんですが、

Surrogates and Supplementary Characters

難しいところをすっ飛ばして、簡潔に説明すると Unicode (UTF-16) は 1文字2Byte で構成されるんですが、それを 4Byte まで拡張するしくみ。

ここまで読んでぎょっとした人もいるかも知れませんが、そんなに心配する必要は正直ないです。

というのは、surrogates pair は通常の API で扱う場合、文字長が2文字として扱われるからです。

とりあえず、検証したところ lstrlenW はもちろんのこと、legacy の VB の Len とかも surrogates pair を扱う場合、1文字で 2 を返します。

また、Vista の Explorer で surrogates pair を扱ってみたんですが、強制的に 512Byte に収められる仕様は健在のようで、そういう buffer を扱う場合も依然と同じ方法で問題ないでしょう。

lstrlenW の reference には WCHAR 単位の count を返すとなっているので、問題はないわけですが、VB とかの Len に関しては文字数を返すとなっているので注意が必要です。

# VB6.0 はどうしようもないのは当然としても、Office 2007 VBA help が文字数となっているのは正直どうかと思いますが。。。

ただ、正直言ってこれが影響を与える部分は表示と密接に係る部分に限定されるので、前述のとおりあまり影響はないでしょう。

投稿日時 : 2007年2月15日 0:57

コメント

# re: Unicode の surrogates pair について その1 2007/02/15 0:57 ちゃっぴ
記事のネタうつしました。

# re: Unicode の surrogates pair について その1 2007/02/15 12:04 とっちゃん
>WCHAR 単位の count を返すとなっているので
ここは、英文の方ですよね?
日本語の方は歴史的な経緯から「文字数を」となってますよw
これ、実際は文字数ではなく、WORD数を返すなんですよねぇw

やっぱりMSDNの誤訳として直してもらうように働きかける方がいいのかなぁ?
でも元の英文自体わかりづらい(文字数とも読めてしまう)からなぁ...w

長らく Shift-JIS と付き合ってきた人にとっては、UNICODEのサロゲートペア問題は
「char でやってたことを wchar_t でもやれってことなのね...フッ」
で終わりですけどねw
#半角全角の方がずっと根の深い問題...w

# re: Unicode の surrogates pair について その1 2007/02/15 12:42 かずくん
> 「char でやってたことを wchar_t でもやれってことなのね...フッ」
そんな人に、decomposition formを持ち出したら、発狂するかもね。

# re: Unicode の surrogates pair について その1 2007/02/15 15:41 とっちゃん
いわゆる合成文字とかの方っすね。>decompsition form(探して出てこなくて焦ったですよ。Normalization Form Decomposition(NFD) の方が通じるかとw)
こっちは、日本語文字しか扱ってこなかった人たちにはよくわかってないって人多いっすね。

逆にヨーロッパ圏の人にはなじみが深いのではないかとw
こちらは逆にサロゲートペアのほうが難しいんだろうなぁという気はしますけどw
#たぶん海外製のツール類のローカライズ版は.NET だからおkで済ませちゃってる可能性が...w
#StringInfo 使って操作なんて普通しないしw

# re: Unicode の surrogates pair について その1 2007/02/15 16:23 中博俊
Officeやらが文字数といっているのは歴史的経緯上仕方がない。
/UnicodeがUTF-16相当なのも歴史的経緯上どうしようもない
#ほんの10年ほどですが(w

合成文字に関しては日本語においても、濁音、半濁音や音符などがあるのでいたって有名な話でみんなが把握している問題ですね。
#大嘘ですがorz

とりあえず/Unicode32 で wchar_tがunsigned longになるように訴えて行きましょう。(現状そんなことするとえらいことになるけど(^^;;)


# re: Unicode の surrogates pair について その1 2007/02/16 0:34 ちゃっぴ
いやぁ。すごい人の書き込みに正直ビビりまくりです。

私なんぞ、C/C++ はとりあえず、なんとか読める程度で、
非常に簡単なのしかできませんから。。。

> いわゆる合成文字とかの方っすね。>decompsition form(探して出てこなくて焦ったですよ。Normalization Form Decomposition(NFD) の方が通じるかとw)

私も調べちゃいました(^^ゞ
でてこないでてこない。。。
Vista になるまでこのこと自体も知らなかったし。

> とりあえず/Unicode32 で wchar_tがunsigned longになるように訴えて行きましょう。(現状そんなことするとえらいことになるけど(^^;;)

それは私も考えたんですけど、FileSystem から何から何まで作り直して、API をもう 1組追加ですか?

こんどは何になるんでしょうね。
Wide の後だから Ultra Wide とかで lenstrU とか(笑)

Post Feedback

タイトル
名前
Url:
コメント