ここから本文です

解決済みの質問

ADODB.Stream でUTF-8をS-JISに変換すると、

nisimo_gt_rさん

ADODB.Stream でUTF-8をS-JISに変換すると、

半角英数字が
(変換前)abc
(変換後)a b c
となってしまい、半角スペースが間に入ってしまいます。

Replace関数でも間を詰めることができず、だめでした。

プログラムは次の通り作成しました。
対応策を教えてください。

テキストファイルを直接読む方法ではなく、
読み込んだ行ごとに変換する前提で教えてください。

作成したプログラム
'-----------------------------------------------------
Public Function UTF8toSJIS(ByRef strUtf8 As String) As String
Dim objStm As Object
Dim buff() As Byte

Set objStm = CreateObject("ADODB.Stream")
objStm.Open
objStm.Type = 1 'Byte型
buff = strUtf8 '変換対象のデータをバイト型変数に格納
objStm.Write = buff

objStm.Position = 0
objStm.Type = 2 'Text型
objStm.Charset = "UTF-8"
UTF8toSJIS = objStm.ReadText

objStm.Close : Set objStm = Nothing
End Function
'-----------------------------------------------------

すみませんが、よろしくお願いします。

補足
漢字などの2バイト文字は、化けてしまいます。

違反報告

ベストアンサーに選ばれた回答

hotosysさん

windowsではファイル内はShift-JISですが、VBA内部ではUnicodeだと思います。
またADODB.Streamは各種文字とUnicode間での変換を行うのだ思います。
質問でabcの間に0が入るのは、Unicodeの文字列データとなっているためだと思います。
Shift-JISに変換するのはADODB.Streamで更にUnicodeをShift-JISに変換するか、VBAのStrconvで変換すればいいと思います。

[ strconvで変換 ]
Sub sample()
Dim s As String
Dim d As String
Dim i As Integer
s = ChrB(&H61) & ChrB(&H62) & ChrB(&H63) 'UTF-8のabc
s = UTF8toSJIS(s)
d = "": For i = 1 To LenB(s): d = d & Hex(AscB(MidB(s, i, 1))) & " ": Next: MsgBox d '61 00 62 00 63 00
s = StrConv(s, vbFromUnicode) 'unicodeをShift-jisへ
d = "": For i = 1 To LenB(s): d = d & Hex(AscB(MidB(s, i, 1))) & " ": Next: MsgBox d '61 62 63
End Sub

この質問は投票によってベストアンサーが選ばれました!

この質問・回答は役に立ちましたか?
役に立った!

お役立ち度:お役立ち度 0点(5点満点中)0人が役に立つと評価しています。

ベストアンサー以外の回答

(1件中1〜1件)

 

napier_s_constantさん

あまり、詳しくないのですが・・・

最終的に "UTF-8" に変換してしまっているように見えます。
"Shift_JIS" では?

このページとか、
http://homepage2.nifty.com/nonnon/SoftSample/VB.NET/SampleModADOS.h...
参考になるでしょうか?

あなたにおすすめの解決済みの質問

Excelのセルに入力された文字列をエンコードして別のセルに表示させるVBAや方法を教えてください。Excelのカテゴリで同様の質問をしましたが、的を射ない回答で困っています。運営ECサイト内の検索結果URLをExcel上で生成する為...
エクセルのマクロでファイルを読み込もうとしていますが文字化けします。文字化けしない方法を教えてください。使用しているのは、Excel2007です。マクロで、テキストファイルを読み込もうしたところ、文字化けします。どうすれ...
エクセルに書かれた内容を元にcsvを出力する、マクロを作ったのですが、scvの文字コードがSJISで出力されてしまいます。このcsvの文字コードをUTF-8で出力させる事は可能でしょうか?

あなたにおすすめの知恵ノート

VBS 文字コード変換 (ADODB.Stream : Read/Write)
PR
知恵ノートとは?

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。

お客様自身の責任と判断で、ご利用ください。

ただいまの回答者

14時17分現在

2972
人が回答!!

1時間以内に5,043件の回答が寄せられています。

>>回答ひろばに行く


知恵コレに追加する

閉じる

知恵コレクションをするID/ニックネームを選択し、「追加する」ボタンを押してください。
※知恵コレクションに追加された質問や知恵ノートは選択されたID/ニックネームのMy知恵袋で確認できます。

ほかのID/ニックネームで利用登録する