VB2005でUTF-8からshift_JISに変換する方法

このQ&Aのポイント
  • VB2005の初心者のための、UTF-8からshift_JISにデータ変換する方法を解説します。
  • XMLデータで日本語の項目が化けてしまう場合、VB2005を使ってshift_JISに変換することで解決できます。
  • 具体的には、XMLデータから特定の項目を抽出してログに出力する際に、文字化けが発生する問題に対処する方法です。
回答を見る
  • ベストアンサー

VB2005でUTF-8からshift_JISに変換する方法

VB2005の初心者です。 UTF-8のXMLデータで、一部日本語の項目が化けているのでshift_JISに変換したいのですが、やり方が分りません。 下記のとおり、XMLデータから項目を抽出して、ログに出力すると化けてしまいます。 Dim CreatorInfodNode As Xml.XmlNodeList CreatorInfodNode = xmlDoc.SelectNodes("/Mml/MmlBody/MmlModuleItem/docInfo[@contentModuleType=contains(@contentModuleType,'patientInfo')]" + _ "/mmlCi:CreatorInfo/mmlPsi:PersonalizedInfo/mmlPsi:personName/mmlNm:Name/mmlNm:fullname", nsmgr1) LbLogFlg = WriteLogFile("fullname:" + CreatorInfodNode(0).InnerText.Trim) ↓ログの出力結果 fullname:????????????????????? 皆様の知恵をお借りできれば幸いです。 よろしくお願い致します。

noname#51596
noname#51596

質問者が選んだベストアンサー

  • ベストアンサー
  • Cmi
  • ベストアンサー率36% (132/364)
回答No.1

重要なのは、WriteLogFileの中身です。 どういう方法でログを出力しているのか補足してみてください。

noname#51596
質問者

補足

早速のお返事ありがとうございます。 ログを出力している部分は下記です。 Public Function WriteLogFile(Byval bText As String) As Boolean Dim LbRet As Boolean Dim strADR As String LbRet = True Try LogFile= IO.File.AppendText(Path) LogFile.WriteLine(bText) LogFile.Close() Catch ex As Exception LbRet = False End Try Return LbRet End Function Aシステム(既存)とBシステムの連携部分の開発をしていており、AシステムからUTF-8で送られてきたXMLデータをBシステム(VB2005で開発)で解析し、DB(SQLServer)に登録したり、画面に表示しようとしています。 視点が変わりますが、UTF-8で送られてきた日本語データをそのままSQLServerに登録したり、VB2005上で画面に表示することもできるのでしょうか。できるのであれば、コード変換しなくてすみます。 質問内容がずれてしまいましたが、上記内容についても何かご存知であれば教えていただければ幸いです。 よろしくお願い致します。

その他の回答 (2)

  • Cmi
  • ベストアンサー率36% (132/364)
回答No.3

読込んだ時点で化けているということでしょうか? それでしたら、読込み時もIO.StreamReaderで宣言時に文字コードを指定してみてください。

noname#51596
質問者

お礼

早速のお返事、本当にありがとうございます。 おっしゃるとおり、XMLデータを読み込む所が間違えていました。 System.Text.Encoding.UTF8.GetString で読み込み、 LogFile = New IO.StreamWriter(Path, True, System.Text.Encoding.GetEncoding("shift_jis")) で日本語で出力することができました。 初歩的な質問でしたが、本当にありがとうございました。

  • Cmi
  • ベストアンサー率36% (132/364)
回答No.2

他にも方法はあるかもしれませんが、私の場合は以下のようにしています。 Dim Writer As New IO.StreamWriter("C:\TestFile.txt"System.Text.Encoding.GetEncoding("Shift-JIS")) のように宣言し、 Writer.WriteLine(bText) で書き込めばできます。

noname#51596
質問者

お礼

遅くなりましたが、度々のお返事、本当にありがとうございます。 教えていただいたとおり下記でやってみましたが、化けたままでした。 Public LogFile As IO.StreamWriter LogFile = New IO.StreamWriter(Path, True, System.Text.Encoding.GetEncoding("Shift-JIS")) LogFile.WriteLine(bText) LogFile.Close() ちなみに、IO.StreamWriterの引数は3つですよね? 上記ソースはどこか間違っているのでしょうか。 度々申し訳ございませんが、もしお分かりでしたら教えていただけますか。 よろしくお願い致します。

関連するQ&A

  • VB2005でXMLデータから複数ある要素の数を読み取る方法

    VB2005、XMLの初心者です。 VB2005でXMLデータを読み取って、DBに登録するプログラムを作っています。 XMLデータから項目を読み取るのは、下記のようにパスを指定してできることが分りました。 CreatorInfodNode = xmlDoc.SelectNodes("/Mml/Body/Module", nsmgr1) ID = CreatorInfodNode(0).InnerText.Trim しかし、下記のような同じ要素が複数あるXMLデータの場合、全ての要素を解析してDBに登録したいのですが、要素の数はどうやって読み取れば良いのでしょうか。ちなみに、要素の数は可変です。 上記のパスを指定する場合、要素のタグが同じなら全てパスは同じになり、最初の要素を取ってくるようですが、複数ある場合は全てを解析したいです。 <Mml> <Body> <Module>A</Module> <Module>B</Module> <Module>C</Module> </Body> </Mml> 何かヒントになるようなことでも良いので、皆様の知恵をお借りできれば幸いです。 よろしくお願い致します。

  • Shift-jisのPerlから、UTF-8、EUC、Shift-jisの3つのエンコードテキストを生成

    Shift-jisで作ったPerlにて、テキストをEUC、UTF-8、Shift-jisにエンコードし外部検索サイト等にテキストリンクを飛ばしたいのですが、うまくいきません。 過去ログにUTF-8から、EUC、UTF-8、Shift-jisへのエンコード方法をみつけ http://oshiete1.goo.ne.jp/qa3745875.html 試行錯誤しましたが、Shift-jisからはうまくいきませんでした。 perl のバージョンは5.8.8です。 ご教示のほどよろしくお願いします。

    • ベストアンサー
    • Perl
  • 文字コードの変換(Shift-JISからUTF8)

    文字コードがShift-JISのCSVファイルを読み込み、UTF-8のテキストファイルに出力するのに プログラムの中で変更しようとしているのですが、うまくいきません。出力ファイルの文字コードを 確認するとShift-JISのままです。 どなたか教えていただけないでしょうか? ActivePerl v5.16.0を使用し、Encodeモジュールのfrom_toを使用しています。 #!/usr/bin/perl use strict; use warnings; use utf8; use Encode; my $input_file="input.csv"; my $output_file="output.txt"; open (IN, $input_file) or die "$!"; open (OUT, ">$output_file") or die "$!"; while (<IN>){ chomp ($_); my @data=split(/,/,$_); for(my $i=0;$i<@data;$i++){ $data[$i]=Encode::from_to($data[$i],'shiftjis','utf8'); #Shift-JISからUTF-8に変換 $data[$i]=~s/\s+//g; print OUT $_; } print OUT "\n"; } close (IN); close (OUT);

    • ベストアンサー
    • Perl
  • VB2005 で encoding="Shift_JIS"や"EUC-JP"のXMLファイルを保存する方法

    VB2005, XML の初心者です。 VB2005で encoding="Shift_JIS" や "EUC-JP" のXMLデータをファイルに保存するにはどうすれば良いのでしょうか。 encoding="UTF-8"であれば、下記で保存できますが、="Shift_JIS" や "EUC-JP" になると保存でエラーになってしまいます。 下記ソースでは、strXMLには正しくXMLが入っていますが、saveするとエラーになり、ファイルの中身を確認すると、日本語の箇所で切れていました。 Public Client As TcpClient Dim stream As NetworkStream stream = Client.GetStream() Dim Data(10000) As Byte Dim len As Int16 = stream.Read(Data, 0, Data.Length) strXML = System.Text.Encoding.UTF8.GetString(Data, 0, len) MsxmlDoc = New MSXML2.DOMDocument Msxmldoc.Loadxml(strXML) MsxmlDoc.save ( "C:\XML.xml") 文字コードについても初心者ですので、ヒントになるようなことでも教えていただければ幸いです。 よろしくお願い致します。

    • ベストアンサー
    • XML
  • unicode と shift_jis

    テキストファイルを読み込みデータを作成して出力するプログラムを作成しているのですが国際化させることになりました。そこで問題が‥テキストファイルが日本用はshift_jis、海外用はunicodeで構成されています。shift_jisでの文字列操作は良いとしてunicodeが全然わかりません。海外向けを想定したときに気をつけなければならないこともわかりません。なんでもいいので教えてください。お願いします。特に、unicodeの文字列操作はまったくよくわかりませんので細かい点から教えていただけると光栄です。よろしいお願いします。

  • shift-jisをUTF-8に読み込ませるには?

    shift-jisにてcsv形式で保存しているテキストファイルの配列(カンマ区切りの3番目)から取り出したものをUTF-8にエンコードする方法をご教示賜りたくご質問させて頂きました。 $Pscrtfl = "./datas/pdtscrt.txt"; open (DT,"<$Pscrtfl"); @Pscrt = <DT>; close (DT); foreach $i (@Pscrt){ @iW = split(/\,/,$i); $Pscrtfl = "./datas/pdtscrt.txt のtxtに入ってる3番目のデータを取り出して、それをUTF-8文字コードに 変換して出力させたいと思っております。 現在のところ私のやってみたこと foreach(@Pscrt){ use Encode; Encode::from_to( $_, 'utf8', 'shiftjis' ); $Pscrtfl .= $_; } とエンコードかけてみるんですが。。。。やはりcsvファイルの文字がUTF-8に変更していないのか、 <!doctype html> <html><head><meta charset="UTF-8">でprintしようとすると、やはり文字化けしてしまいます。 これを文字化けしない方法がお分かりの方おられましたら、ぜひご教示下さいませ。

    • ベストアンサー
    • Perl
  • UTF-8の「~」をsjisにencodeすると「?」になってしまいます

    <?xml version="1.0" encoding="UTF-8" ?> <root> <data>あ~お</data> </root> というようなXMLをXML::Simpleでparseし、 use Encode; $data = encode("sjis", $xmldata); のようにsjisにエンコードしてhtmlで表示させたところ、 「あ~お」の「~」のところが「?」になってしまいます。 これを「あ~お」と表示するにはどうしたらよいでしょうか。 表示する方のHTMLのコードはShift_JISでなければなりません。 アドバイスのほど、よろしくお願いいたします。

    • ベストアンサー
    • Perl
  • charset=Shift_JIS

    4つのhtmlを作成し metaタグを以下のように記述しました。 <meta http-equiv="Content-Type" content="text/html; charset=SHIFT_JIS"> <meta http-equiv="Content-Style-Type" content="text/css"> <link rel="stylesheet" type="text/css" href="css/style.css"> <script language="javascript1.2" src="js/openex.js"></script> <link rel="stylesheet" type="text/css" href="css/style.css"> 2つのファイルが、IEにおいてエンコード(UTF-8)を選択しないと見れません。 オーサリングソフトは、ホームページビルダーV9です。 最初に作成したときは、気づかなかったのですが、設定において ”文字エンコードをmetaタグで指定する”の設定項目を自動にしておりました。 すると 2つのファイルが自動で charsetが、UTF-8になってたようです。 その後設定をSHIFT_JISにし、charset=UTF-8となったところは charset=SHIFT_JIS"には、後で書き換えました。 ページを作成する際、テンプレートを作成して 4つのファイルを作成したはずなんですが、 なぜ こうなってしまったのかが わかりません。 charset=SHIFT_JIS"を指定してるのに なぜUTF-8を選択しないと見れないのでしょう? かなり 困っています。何度もファイルを書き換えましたが、解決しません。わかる方 なにとぞご教示ください。

  • XMLファイルのattribute値を取得するには?

    ASP内の処理でwebからXMLファイルをLoadし、 そこからattribute値を取得するにはどうすればよいのでしょうか? ちなみにXMLファイル取得は成功しています。 使用スクリプトはVBscriptです。 以下がロードしたXMLファイルの内容です。 <?xml version="1.0" encoding="Shift_JIS" ?> <xml> <AAA width="2.15" <--この2.15と height="4.60" <--この4.60を取得したい /> </xml> 以下が今、途中まで作っているソースです。 <% language = "VBscript" %> <% Dim XmlDoc, objXmlError, objXmlNode Set XmlDoc = CreateObject("MSXML2.DOMDocument") xmlDoc.async = false XmlDoc.setProperty "ServerHTTPRequest", true XmlDoc.load("http://localhost/test.xml") Set objXmlNode = XmlDoc.selectNodes("/root/AAA") ここから先がよくわからない %>

  • UTF-8のXMLをShift-JISのHTMLとして出力

    UTF-8のXMLの内容を適当に抽出してshift-jisのHTMLとして出力したい場合、smartyやらxsltやら、どの方法を使用するのが最もスマートでしょうか。

    • 締切済み
    • PHP

専門家に質問してみよう