ADODB.Streamで文字コードをutf-8にする


ありたもきお  2009-11-12 18:19:24  No: 102078

すみません。教えてください。
単純なところではまっております。

ADODB.Streamで文字コードをutf-8にしたいです。文字列はstrValに入っており、もともとはフォームに入力されたものです。

Msgbox strVal

Set Obj = CreateObject("ADODB.Stream")
With Obj
    .Open
    .Type = 2
    .Charset = "utf-8"
    .WriteText strVal
    .Position = 0
    strVal= .ReadText(-1)
    .Close
End With

Msgbox strVal

これですと、With句の前後のMsgboxで同じ文字列が表示されます。文字コードが変換されていません。

アドバイス頂戴できましたら幸いです。


魔界の仮面弁士  2009-11-12 19:12:03  No: 102079

まず、前提条件が間違っています。

文字コードが意味を持つのは、
  ・文字列をバイナリデータとして保存(エンコード)する場合
  ・バイナリデータを文字列として読み込む(デコードする)場合
だけです。文字列そのものには、文字コードという概念はありません。

# この場合のバイナリデータとは、Byte配列、ストリーム、ファイルなどを指します。

文字コードを意識したデータを保持したいのであれば、String ではなく、
Byte 配列や Stream の状態で管理してください。
String の内部データは UTF-16 固定であり、変更できませんし、
無理に格納すると、元の文字列を破損させてしまう事もあります。

もし、UTF-8 相当のバイナリを取得したい、という意味であれば、
Stream をバイナリモードに切り替えてから、Read メソッドで
Byte 配列として取得すれば OK です。これならば正しく処理できます。


ありたもきお  2009-11-12 21:25:13  No: 102080

魔界の仮面弁士さん、ありがとうございます。

そうなんですね。勉強不足ですみません。
やりたいことは、フォームに入力された文字列をGoogleマップの引数として渡す、なのですが、そうしますと一度ファイルに保存するとかしないといけないのでしょうか。

utf-8形式のファイルを扱う方法はググるとたくさんできてきました。


N・アクア・ドルフィン  2009-11-12 22:02:46  No: 102081

ワクワクを思いだんすんだ


魔界の仮面弁士  2009-11-15 01:35:50  No: 102082

> Googleマップの引数として渡す
どの引数でしょうか? また、Googleマップはどのように利用していますか?

これだけの情報では、SOAP ベースの通信で XML データを直接作ろうという
話なのか、あるいは単に HTTP GET の URL を作ろうとしているのかさえ
分かりませんし、その中のどの部分を指定しようとしているのかも見えません。

> そうしますと一度ファイルに保存するとかしないといけないのでしょうか。
保存先は ファイルでも Stream のままでも Byte() にしても良いですが、
最終的に渡したい「引数」の形式が分からないと答えられないです。

もし、その引数が文字列型なのだとしても、その形式が
分からない事には、変換のしようがありません。

  "東京タワー"  …元の文字列そのまま
  "938C8B9E835E838F815B"  …16進数表記(Shift_JIS)
  "7167AC4EBF30EF30FC30"  …16進数表記(UTF-16)
  "E69DB1E4BAACE382BFE383AFE383BC"  …16進数表記(UTF-8)
  "%93%8C%8B%9E%83%5E%83%8F%81%5B"  …RFC1738(Shift_JIS)
  "%E6%9D%B1%E4%BA%AC%E3%82%BF%E3%83%AF%E3%83%BC" …RFC1738(UTF-8)
  "%u6771%u4EAC%u30BF%u30EF%u30FC" …VBScript Escape 関数(UTF-16)

やりたい事がハッキリとは分からないので、意図通りになっているかは
分かりませんが、VB6/VBA だとしたら、こういう書き方ができます。

src = "東京タワー"
Dim b() As Byte
b = StrConv(src, vbFromUnicode)

For Each v In b
    ret = ret & ("%" & Right("00" & Hex(v), 2))
Next

LAT = "35.65861"
LNG = "139.745447"
ZM = "18"

URL = "http://maps.google.co.jp/maps?q=" & LAT & "," & LNG & "(" & ret & ")&z=" & ZM
IE.Navigate URL


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加