2

私はC++で書かれたWindowsアプリケーションを持っています。これでは、ファイル名がユニコードであるか、wcstombs()関数を使用していないかを確認するために使用しました。変換に失敗した場合は、Unicodeファイル名であると見なされます。同様に、Linuxで同じことを試しても、変換は失敗しません。Windowsでは、デフォルトの文字セットはLATINですが、Linuxのデフォルトの文字セットはUTF8です。ファイル名がUnicodeであるかどうかに基づいて、さまざまなコーディングのセットがあります。Linuxでは理解できなかったため、アプリケーションをUnicode文字用に移植可能にすることはできません。これに対する他の回避策はありますか、それとも私は何か間違ったことをしていますか?

4

1 に答える 1

5

utf-8には、すべてのASCII文字がasciiのように表され、すべての非ASCII文字が2バイト以上のシーケンスとして表されるという優れた特性があります>=128。したがって、ASCIIをチェックする必要があるのは、符号なしバイトの数値の大きさだけです。> = 128の場合、非ASCII。基本エンコーディングとしてutf-8を使用すると、「ユニコード」を意味します(latin-1の範囲内であっても、latin-1はユニコードの適切なサブセットであり、最初の256を構成することに注意してください)。コードポイント)。


ただし、Windowsではファイル名は文字のシーケンスですが、*nixではバイトのシーケンスであることに注意してください。

したがって、理想的には、これらのバイトがエンコードする可能性のあるものを実際に無視する必要があります。

ただし、ナイーブなユーザーの見解と一致させるのは難しいかもしれません。

于 2013-03-26T12:33:38.797 に答える