掲示板システム
ホーム
アクセス解析
カテゴリ
ログアウト
VB6.0 + MySQL 4.1.22 での文字化け (ID:100631)
名前
ホームページ(ブログ、Twitterなど)のURL (省略可)
本文
> 発想を変え、 変えるべきでは無いと思いますけれども…。 > 取得した文字列を変換する方法を取ろうと考えました。 う〜ん、いろいろと混乱があるようですね。 > 'UTF8 → Unicode 変換関数 > Private Function UTF8_TO_UNICODE(strData As String) As String そもそも、UTF-8 も Unicode である、という点はさておき。 http://homepage1.nifty.com/nomenclator/unicode/ucs_utf.htm String 型は、UTF-16 形式で格納される事を前提に設計されています。 UTF-8 データの受け渡しなら、Byte配列/ファイルパス/Stream などを使うべきかと。 そもそも、文字列そのものには、文字コード変換(エンコード/デコード)の概念はありません。 それが必要になるのは、文字列をテキストファイル化するなどの目的で、バイトデータの並びに 変換するとき(あるいは逆に、そうしたバイナリから文字列に復元する際)なのですから、 文字コード変換時の入出力に String を使うのは不自然です。 まぁ、String は任意のバイナリを格納できますから、使えないわけではありませんけれども。 で、本題。 >'UTF8 → Unicode 変換関数 > : > bytData = StrConv(strData, vbFromUnicode) この処理は、strData 内のバイナリを「UTF-16 → Shift_JIS 変換」するためのものです。 すなわち strData の内容は、UTF-16 エンコードされた文字列で無ければなりません。 (要するに、VB6で通常利用されている標準的な文字列データであるべき、という事です) もし、strData の内容が UTF-8 バイナリなのであれば、この時点で NG となります。 そして提示されたコードを見ると、その Shift_JIS に変換されたバイナリを、 > .Charset = "UTF-8" > UTF8_TO_UNICODE = .ReadText() のようにして、「UTF-8 とみなして無理に読み込もうとしている」のですから、 データが破損するのも当然かと。 > 'Unicode → UTF8 変換関数 > : > bytData() = StrConv(strData, vbUnicode) こちらは、strData 内のバイナリを、「Shift_JIS → UTF-16 変換」するものです。 という事で、 > UNICODE_TO_UTF8 = .ReadText() これも無意味です。 そもそも、Stream の ReadText メソッドは、データを String 型の文字列として返します。 (すなわち、このメソッドを使う限り、出力結果のエンコードは、常に UTF-16 という事です)
←解決時は質問者本人がここをチェックしてください。
更新する
戻る
掲示板システム
Copyright 2021 Takeshi Okamoto All Rights Reserved.