掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
文字化けの判定 (ID:102897)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> 実行環境は、win98〜win7が考えられます。 一部の文字においては、vbWide / vbNarrow 変換や、vbFromUnicode / vbUnicode 変換が OS によって異なる動作をするケースがありえますのでご注意を。 http://madia.world.coocan.jp/cgi-bin/VBBBS2/wwwlng.cgi?print+200908/09080033.txt http://support.microsoft.com/kb/170559/ja > テキストデータには何でも入るようにしています。 そのテキストデータとは、以下の (1) という認識で合っていますか? それとも、何でも入るという事は (2) なのでしょうか? --------------- (1) String 変数。中身は VB 標準の Unicode 文字列形式だが、 中身は Shift_JIS 相当のデータしか含まれていない。 (2) String 変数。中身は VB 標準の Unicode 文字列形式であり、 Shift_JIS で表現できない Unicode 文字も含まれる可能性がある。 (3) String 変数。中身は Shift_JIS でエンコードされたバイナリ。 (4) UTF-16 テキストファイル、もしくは UTF-16 バイナリ。 (5) Shift_JIS テキストファイル、もしくは Shift_JIS バイナリ。 (6) 任意のバイナリ。Shift_JIS や Unicode の文字列として デコードできないデータも含まれる可能性がある。 (7) 上記以外。(UTF-8 の場合など) --------------- > たとえば、次のような場合です。 > debug.print StrConv(LeftB(StrConv("あいう1えお", vbFromUnicode),10), vbUnicode) vbFromUnicode と LeftB で切り出しておられるのですね。 vbFromUnicode での変換では、Shift_JIS で表現できない文字が含まれていると vbUnicode で復元できません。今回は、テキストデータの内容を 制限していないとのことですが、Shift_JIS に無い文字が渡された場合、 その文字はどのように扱いたいのでしょうか? > そこで、最後の一文字を取得して判定しようと考え、関数を作ってみました。 最後の文字だけを判定しても、あまり意味がありません。 UTF-8 や UTF-16 とは異なり、Shift_JIS データという物は、 その仕様上、文字列の途中からでは分断判定を行う事ができません。 正確に切り出すためには、先頭から一文字ずつ判定する必要があります。 具体例を挙げてみると、 Chr(&H8181) は「=」の文字 Chr(&H8182) は「≠」の文字 Chr(&H8281) は「a」の文字 Chr(&H8282) は「b」の文字 あたりが分かりやすいかと思います。 これでは、切り出したバイナリの末尾が &H81 や &H82 だとしても、 それが分断されているかどうかは分かりませんよね。 10 年以上前のコードですが、一応紹介しておきます。 http://hanatyan.sakura.ne.jp/patio/read.cgi?no=229 > strChar = StrConv(moji, vbNarrow + vbUpperCase + vbHiragana) 第二引数の指定は、 strChar = StrConv(moji, vbNarrow Or vbUpperCase Or vbHiragana) とすべきです。ビットフラグは、+ 演算子ではなく Or 演算子で連結しましょう。
←解決時は質問者本人がここをチェックしてください。
戻る
掲示板システム
Copyright 2020 Takeshi Okamoto All Rights Reserved.