2012-03-08 8 views
1

私は次のコードを持っている:私の場合は.NETマイクロ(μ)ギリシャ文字の大文字の問題

string firstMicro = "aa \u00b5 bb"; 
string secondMicro = "aa \u03bc bb"; 

Assert.IsFalse(firstMicro == secondMicro); 

string upperFirstMicro = firstMicro.ToUpper(); 
string upperSecondMicro = secondMicro.ToUpper(); 

Assert.IsFalse(upperFirstMicro == upperSecondMicro); 

、最初のテストパス(明らかに、両方の文字列が異なっている)が、2番目のケースでは、テストを両方のテキストが同一であるために失敗します($ AA M BB)。私は、CultureInfoを使用していたはずのケースでは、少なくとも最初のケース(ASCIIコードのマイクロサイン)は同じままであったはずです...誰かが私になぜこれが起こっているのか理解できるように助けることができますか?

Aparently、ここでは別のスレッドがある - How to correctly uppercase Greek words in .NET?は、しかし、明白な答えはありません...

感謝。 D.

+0

'ToUpper'は現在の' CultureInfo'を使います(カルチャ情報を渡さない限り)。あなたの現在の 'CultureInfo'は何ですか? – Aliostad

+1

[2番目のテストの根拠とはなんですか?](http://stackoverflow.com/a/9617044/7724)結果として得られる2つの大文字の文字列が実際にどのようになると思いますか? U00b5は「本当に手紙じゃないから」変わらないと思いますか?また、ASCIIはここには関係しません。 – bzlm

+0

そしてなぜあなたは 'CultureInfo'を使わなかったのですか?正しいことが分かっていれば? – Oded

答えて

3

一部の小文字は同じ大文字です。申し訳ありませんが、Unicodeが定義されています。

例えば、UnicodeData.txtのように、U+0069 (i)U+0131 (ı)の両方が大文字の場合はU+0049 (I)です。

正確な問題は何ですか?多分私たちは助けることができます。

+1

[悪い例。](http://www.fileformat.info/info/unicode/char/0069/index.htm)[Turkish 'CultureInfo'にはiの大文字のU + 0049はありません。](http: //stackoverflow.com/a/3550226/7724) – bzlm

+0

十分に公正です。私は "文化情報がない"と言っていたはずです。そして私がリンクしているデータファイルには、それ自身の問題があります。たとえば、 'U + 1E9E(ẞ)'の小文字は 'U + 00DF(ß)'です。しかし、 'U + 00DF(ß)'には大文字の対応はありません!それでも、それは公式です。 –

+0

[ケース折りたたみ文書も公式です。](ftp://ftp.unicode.org/Public/UNIDATA/CaseFolding.txt) – bzlm

4

マイクロ秒は、上部ケーシングの後もμSECです。それをMSECに持ち上げることは、その意味を致命的に変えるだろう。そのため、グリフには2つのコードポイントがあります。

+0

問題は既に解決されており、私はそれをした人は正しいと思います。私の場合は、(ミクロ)は2つの「意味」を持っています:言及したような象徴とギリシャ文字。どちらも同じ文字を指すユニコードテーブル内のマッピングを持っています。 – dcg

+0

私は「申し訳ありませんが、Unicodeが定義されている方法です」とは確信していませんでした。それは完全に大丈夫です。 –

+0

私はHansに同意します。明らかに、0xB5は大文字でも小文字(L1)でもなく、Po(句読点other)として分類されるべきです。 IMOこれはUnicodeのバグです。 –

関連する問題