2012-03-29 19 views

答えて

8

ポータブルな方法は、ICUなどのユニコード対応のライブラリを使用することです。あなたが探している機能はu_strToUpperかもしれません。

+3

注記として、ICUではUTF-8→UTF-16→大文字のUTF-16→大文字のUTF-8を変換する必要があります。 (実際にこれを行う他のライブラリはありません) –

0

これを行う標準的な方法は、ワイド文字の文字列があり、ワイド文字でtowlower/towupper/towctransを使用する場合です(ロケールが正しく設定されていると動作します)。したがって、UTF-8文字列をワイド文字列に変換し、wchar_tを受け取り、変換するこれらの関数を使用する必要があります。

これは巨大なPITAなので、おそらくICUのようなサポートされているオープンソースのUnicodeライブラリを使う方が良いでしょう。

+1

いいえ、これは間違っています。大文字のßは2文字であるSSなので、ドイツ語のテキスト(たとえば)を扱うのは不可能です。これは、壊れた唯一の例からは遠いが、最も一般的な例である。 –

+0

真ですが、それはposix標準ライブラリを使って訂正するのにぴったりの唯一のバージョンです(そして、最初に文字の間に1:1のケースマッピングを指定したUnicode標準を責めています)。 –

+0

@JacobBフルケーシングは、古いシンプルなシンプルケーシングよりもはるかに優れた結果をもたらします。そのため、JavaやPerlなどの言語では、文字列のカスケード機能が完全にケーシングされています。コードポイントごとに作業しないでください。それだけでは動作しません。あなたは全体の文字列が必要です。 – tchrist

8

glibはg_utf8_strup()である。

+1

これは正しい答えだと確信していますが、何らかの理由で 'man g_utf8_strup'を実行してg_utf8_strup'を手動で入力しないでください。' nm /opt/local/lib/libglib-2.0.a | grep g_utf8_strup'はそれがそこにあることを証明します。それは本当に面白いです。 FTFSF。 – tchrist

+1

@tchrist:Stupidは相対的です。すべてのglib関数のマニュアルページでは、100 MBのマニュアルページが表示されます。 –

+0

@ IgnacioVazquez-Abrams:圧縮されていないHTML **のバージョンが75 MBでどのように重視されているか見てみると、 – ninjalj

関連する問題