Vistaが登場してから何かと文字コードの拡張にともなう影響が声高々と謳われているが、
「何がそんなにもんだいなんじゃい!」ってVistaでMy Programを動かしてたら・・・・
あれれ???「この文字バックスペースすると文字化けする・・・□に・・どうなってんじゃい!!!」
およそ10分Webサーフィン♪
!:evil:!サロゲートペア???で問題発生!?
簡単にまとめると・・・
1.サロゲートペアとはUTF16では本来2バイト(16bit)で1文字を表現しているが、65,536バイトでは表現できない文字があらわれた(中国、インド、日本などアルファベット圏外字を扱うため)ために16bit+16bit(前半0xD800~0xDBFF, 後半0xDC00~0xDFFF)を使用して16bitで表現できない文字をこの領域に入れる方法をサロゲートペアと言う。詳しくはここ
サロゲートペア自体は昔から存在する。
2.近年のOS内部処理ではUnicodeのUTF16によって文字制御している。
3.XPまでの日本語標準フォントにはサロゲートペアが存在しなかった為、UTF16は2バイトのみと判断する場合がほとんどに。(これも問題だが・・・デファクトスタンダードされた)
4.Vistaに搭載された日本語標準フォントにはサロゲートペアが存在する。
5.サロゲートペアの文字は見た目は1文字だが、プログラミング上のLengthが2(4バイト)で帰ってくる!!!(もちろん実際に内部では4バイト=32bitを使用しているのだから・・・)
6.今まで文字をカウントしている関数が信用ならない。C#のcharにサロゲートペア入れて試しにLengthみると2!?本来なら1がほしい
7.サロゲートペアをTextBoxなどに入れてbackspaceすると下位サロゲートだけ消えて上位サロゲートが残るため文字化け(□など)が起こる。なので2回押して1文字消す???
こんな感じになる・・・・:evil:!!!
Vistaの文字コード問題はこればかりじゃないが、これが一番影響範囲大でしょう!
PGとして考えられる影響範囲
1.SQL等、検索はどうなの?
2.正規表現は?
3.文字をカウントしている関数は?
4.バイト制限しているコントロールは?
5.left、raightrightなど関数は?
少し考えただけで頭が痛くなる・・・どうすんの!オレ!?つづく(笑)ってな場合じゃない!
この仕様きめたお偉いさん方はOS環境やPGのことなど理解してないでしょう!
しかし、これは2000年問題よりも事は重大だと思うよ・・・まじで:mad:
最後に、今まで表記が間違っていた文字や文字コードとして無かった文字が新たに追加されるのは
歓迎されるべきだが、追加の方法が今の時点で尚且つサロゲートペアとして追加するべきだったのか?
かなり疑問に感じる。
関連リンク
・C#など.NETでの対応方法
・MS製品JIS2004対応表
・文字化けとは
・Vista変更文字1
・Vista変更文字2
・総まとめ情報
いつもこのサイトで勉強させてもらってます。
>5.left、raightなど関数は?
raight関数なんてありませんよね?
2度見しちゃいました^^;笑
nanaさん
Ohhhh、Noooo!
そんな関数ないですね(汗)
間違えThank’s!です(^^)