10/02/03 01:39:49
>>587
ユニコード変換とかロケール変換とか以前に、マルチバイト文字をマルチバイト文字として扱ってないのが問題。
デスクトップはShift-JISで83 66、83 58、83 4E、83 67、83 62、83 76となるが、この各第二バイトを一文字だけで見るとf、X、N、g、b、vになっている。
これを小文字へ変換するとf、x、n、g、b、vとなり当てはめると83 66、83 78、83 6E、83 67、83 62、83 76となり、これ即ち「デベハトップ」である。
逆に大文字にすると83 46、83 58、83 4E、83 47、83 42、83 56、これ即ち「ェスクエィシ」である。
どっかで小文字へ変換してるな貴様?
ちゃんとマルチバイトを扱いたいなら、ロケールをセットした上でisleadbyteや_ismbblead(VS系専用)でマルチバイト文字の先行バイトであるかを判定して、先行バイトに続く文字では処理を行わないなどの例外を設けましょう。
マルチバイト文字の第二バイトを単体で判定すると先行バイト判定される文字もあるので、先行バイトが来たらナニも言わず次の\0以外の文字を読み飛ばすとかの処理方法を使いましょう。
海外製でよくひっかかるのは、海外製ソフトでマルチバイトを考慮せず大文字小文字変換をカマスから。
同様に、マルチバイト文字の第二バイトで\が入るとパス区切り扱いされて泣くケースもある。
与えられた文字列の最後の\を消すとかの処理でも、ちゃんとマルチバイトか判定しましょう。