私のC++コードでは、文字列がエンコードされているかどうか、またはエンコードの種類に関係なく、大文字と小文字を区別しない比較が必要です。文字列はASCIIでも非ASCIIでもかまいません。正しいロケールが設定されているかどうかに関わらず、それをそのまま保存して2番目の文字列と比較するだけです。C++でUnicode-Agnosticの大文字と小文字を区別しない比較を実現する方法
ユースケース:私のアプリケーションが最初に "ZoëSaldaña.txt"という文字列(ファイル名としましょう)を受け取り、それをそのまま保存するとします。その後、別の文字列 "zoësaLdañA.txt"を受け取り、これと最初の文字列の比較は、いくつかのAPIを使用して一致する必要があります。ファイル名 "abc.txt"と "AbC.txt"と同じです。
私はIBMのICUと、デフォルトでUTF-16エンコーディングをどのように使用しているかについて読んだ。
をICUがシームレスにかかわらず、エンコードの種類の文字列を処理することにより、私の要件を解決するための手段を提供している場合:私は知って興味?
ICUのAPIを使用して、答えが「いいえ」の場合、すべての文字列(ASCIIと非ASCIIの両方)をUTF-16に正規化し、大文字と小文字を区別しない比較やその他の操作?
これを容易にする代替手段はありますか?
私はこのpostを読んでいますが、それは私の要件を満たしていません。
ありがとうございます!
に関連していないです。トルコでは、 "FILE"は "file"と一致してはいけません。 ( "FİLE"は "file"と一致し、 "FILE"は "fıle"と一致するはずです)。それが明白でない場合には、トルコ語には点線のi(iとİ)とドットのないi(ıとI)があります。 –
文字列はどのようにエンコードされていますか?ソースエンコーディングが何であるかを少なくとも知っていなければ、何も役に立ちません。 –
ユースケースは本当にちょっとばかです。ファイル名については、大文字と小文字を区別しないと恣意的に判断することはできません。ほとんどのUnixライクなファイルシステム上のファイルは、好きかどうかにかかわらず大文字と小文字を区別しません。 Windows/NTFSの場合は、そのディスクに格納されているケーステーブルを使用して大文字小文字を区別しません。 – MSalters