すみません。教えてください。
単純なところではまっております。
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で同じ文字列が表示されます。文字コードが変換されていません。
アドバイス頂戴できましたら幸いです。
まず、前提条件が間違っています。
文字コードが意味を持つのは、
・文字列をバイナリデータとして保存(エンコード)する場合
・バイナリデータを文字列として読み込む(デコードする)場合
だけです。文字列そのものには、文字コードという概念はありません。
# この場合のバイナリデータとは、Byte配列、ストリーム、ファイルなどを指します。
文字コードを意識したデータを保持したいのであれば、String ではなく、
Byte 配列や Stream の状態で管理してください。
String の内部データは UTF-16 固定であり、変更できませんし、
無理に格納すると、元の文字列を破損させてしまう事もあります。
もし、UTF-8 相当のバイナリを取得したい、という意味であれば、
Stream をバイナリモードに切り替えてから、Read メソッドで
Byte 配列として取得すれば OK です。これならば正しく処理できます。
魔界の仮面弁士さん、ありがとうございます。
そうなんですね。勉強不足ですみません。
やりたいことは、フォームに入力された文字列をGoogleマップの引数として渡す、なのですが、そうしますと一度ファイルに保存するとかしないといけないのでしょうか。
utf-8形式のファイルを扱う方法はググるとたくさんできてきました。
ワクワクを思いだんすんだ
> 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
ツイート | ![]() |