C ++でのワイド文字ストリングの小文字への変換
-
06-07-2019 - |
質問
C ++でwchar_t文字列を大文字から小文字に変換するにはどうすればよいですか?
文字列には、日本語、中国語、ドイツ語、ギリシャ語の文字が混在しています。
けん引機の使用について考えました...
http://msdn.microsoft.com/ en-us / library / 8h19t214%28VS.80%29.aspx
..しかし、ドキュメントには次のように書かれています:
towlowerの大文字小文字変換はロケール固有です。大文字と小文字は、現在のロケールに関連する文字のみが変更されます。
編集:たぶん私がやっていることを説明する必要があります。ユーザーからUnicode検索クエリを受け取りました。もともとはUTF-8エンコードですが、ワイド文字に変換しています(言い方が間違っている可能性があります)。デバッガー(VS2008)では、<!> quot; variable quick watch <!> quot;に日本語、ドイツ語などの文字が正しく表示されます。 Unicodeの別のデータセットを調べて、検索文字列の一致を見つける必要があります。検索で大文字と小文字が区別される場合、これは私にとっては問題ありませんが、大文字と小文字を区別しないで行うことはより問題です。この問題を解決する私の(おそらく素朴な)アプローチは、すべての入力データと出力データを小文字に変換してから比較することです。
他のヒント
手に厄介な問題があります。日本語ロケールでは、ドイツ語の変換とその逆の変換はできません。キャプチャの概念も持たない言語もあります(toupper
友人はここでは何もしないでしょう、私は思う)。それでは、文字列を同じ言語の個々の単語の塊に分割できますか?可能であれば、ピースを変換して、それらを結び付けることができます。
このSOの回答は、ファセットを使用して複数のロケールを操作する方法を示しています。これがWindowsの場合、win32 API関数の使用を検討できます。C++。NET(マネージC ++)で作業できる場合は、Unicode準拠のchar.ToLower
およびstring.ToLower
関数を使用できます。
_wcslwr_l
の<wchar.h>
をご覧ください( MSDN )。
各ロケールの入力で関数を実行できるはずです。