コンテンツへスキップ
ものがたり
戻る

2005-06-07

世の中いろんな人がいるもんだ。一度も貢献した事のないプロジェクトのMLに、project managerになってやる、別のプロジェクトの一部として発展させよう、とか言い出す奴とか。すげーな。

まあmcのことなんだけどね。

ウソも繰り返し唱え続ければ…

ACCSまたやったのかよ

どのバージョンなんだー

CompareInfo.Compare()で無視される文字は、既に洗い出し終えたのだけど、そもそも一体これらは何なのかを調べている。が、何となく分かってきた気がする。とりあえず.NETで使われているUnicodeのバージョンは:

で、おそらくCompareInfo.Compare()で無視される文字というのは、単純にUnicodeCategoryで言えばFormatとOtherNotAssignedの2種類だけなのだろう、と推測している。Char.GetUnicodeCategory()で返ってくる値とあまりにも違うのは、それだけ古いマッピングをLCMapStringがもっているということだ。実際

0x01F6 <= i && i <= 0x01F9
0x0218 <= i && i <= 0x0233
0x02A9 <= i && i <= 0x02AD
0x02EA <= i && i <= 0x02EE
0x0349 <= i && i <= 0x036F
0x0488 <= i && i <= 0x048F

(コードの抜粋なので変なのはしょうがないとして)この範囲に含まれる文字は完全に無視されるのだけど(UnicodeCategoryはバラバラ)、この範囲の文字はUnicode 1.1以降3.1までで追加された文字であるようだ2

おそらくIgnoreNonSpaceはNonSpacingMarkに、IgnoreSymbolsはXXXSymbolに、それぞれ(Unicode 1.0のマッピングに基づいて)対応していたのだろう。

じゃあ実際にはどうやって無視される文字・無視されない文字を識別すればいいのか? 知りません。Unicode Character Databaseと格闘すれば良いんじゃないか、っていう気もするけど、根性で頑張ってねとしか言いようがない。


コメント

謎工 — 06/07/2005 17:19:15

ACCSと言う団体にまともな統計数値を弾き出す能力が無いことは5年前にソニー独禁法違反事件審判で「(物証として提出した)このデータは会員企業各社が申告した数値を並べただけだ」と開き直っていた時から承知していましたけれど、こうして改善どころかエスカレートする様を見せ付けられると、もう!

atsushieno — 06/07/2005 18:07:12

SBの会計と同じで、一番都合の良さそうな方式を選んでやっているのだろうなあ、と思えてきますね。どちらも専門家(?)の人に簡単に見破られてしまうのがお粗末ですが…

Footnotes

  1. 例によって時系列的にUnicode 2.0以降というのはあり得ない。

  2. Unicode Character DatabaseのDerivedAge.txtを見て確認。


この記事を共有:

前の記事
ウソも繰り返し唱え続ければ…
次の記事
bug in JDK? java.text.DecimalFormat