- - PR -
VB.NET FilePut関数の文字コードに関して
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2008-08-25 15:49
御世話になっております。キンタロスです。
今回、VB.NETでバッチファイル(正確にはexeをBATファイルでキック)を作成しております。 処理の中でFilePut関数を使用してCSV(TAB区切り)ファイルを作成しているのですが、 その際の文字コードが不明で投稿してみました。 FilePut関数を調べてみたのですが特に文字コードを指定するような仕様では無かった為、 実際には文字コードは何で作成されているのか疑問です。(デフォルトはUTF-8という方もいましたが・・・) 今回の仕様としてはファイル出力はS-JISで出力する様になっており困っています。 以下はソースです。 --------------------------------------------------------------------------- 省略 inFileNo = FreeFile() 'ファイル オープン FileOpen(inFileNo, pstEXPFile, OpenMode.Binary, OpenAccess.Write, OpenShare.LockWrite) Do While DR.Read stCSV = DR.Item(0) For inIX = 1 To DR.FieldCount - 1 stCSV = stCSV & vbTab stCSV = stCSV & DR.Item(inIX) Next stCSV = stCSV & vbCrLf FilePut(inFileNo, stCSV) '件数カウント mlnCount = mlnCount + 1 Loop 'ファイル クローズ FileClose(inFileNo) 'データリーダー クローズ DR.Close() DR = Nothing --------------------------------------------------------------------------- FilePut関数でS-JISで出力というのは可能でしょうか? 宜しくお願い致します。 |
|
投稿日時: 2008-08-25 21:57
FilePutで出力しないとダメなのでしょうか。
StreamWriterクラスなら文字コードは指定できます。 http://msdn.microsoft.com/ja-jp/library/system.io.streamwriter(VS.80).aspx |
|
投稿日時: 2008-08-26 12:10
もん吉さん
どうも有難う御座います。 StreamWriterクラスを使用して解決致しました。 |
|
投稿日時: 2008-08-27 09:58
解決したつもりでいましたが、問題が発生しました。
ファイル出力は行えるのですが、 全てのデータが出力されていないようです。 (確認すると最終行は出力されていない。その前のレコードはデータの途中で切れている) --------------------------------------------- Do While DR.Read stCSV = DR.Item(0) For inIX = 1 To DR.FieldCount - 1 stCSV = stCSV & vbTab stCSV = stCSV & DR.Item(inIX) Next stCSV = stCSV & vbCrLf sw.WriteLine(stCSV) Loop --------------------------------------------- 特に件数でどうこうする処理は入れていないので、 最終行とその前のレコードだけ出力しないなんて事はないと思うのですが。。。 StreamWriterで一回の処理内で扱える最大の容量なんて物があるのでしょうか? どうもファイルの容量からすると119KB前後でおかしくなっているようです。 |
|
投稿日時: 2008-08-27 12:44
処理が終わった後、StreamWriterのCloseは実行していますか?
|
|
投稿日時: 2008-08-27 14:53
GENZOさん
すみません・・・漏れていました・・・ StreamWriterのCloseを追加した所、正常に出力されました。 有難う御座います。 しかしまたまた問題が・・・ 今回、S-JISで出力していますが、既存のデータに"鑫"という文字が入っています。 この"鑫"をS-JISで出力すると元々はユニコードなので当たり前ですが"?"となってしまいます。 バイナリデータで確認してもアスキーコードの"3F"(?のコード)となっています。 StreamWriterで出力した際にユニコードデータは"?"に変換されてしまうのでしょうか? |
|
投稿日時: 2008-08-27 17:01
Unicodeの"鑫"に対応するコードがShift-JIS(正確にはCP932)に存在しないため
変換に失敗しているのだと思います。 UnicodeとShift-JISとの変換はCP932変換テーブルを元に行われているかと思いますが、 その変換テーブルに存在しないコードは正しく変換できません。 |
|
投稿日時: 2008-08-27 18:47
Tramさん
どうも有難う御座います。 やはり無理そうですね・・・ 先方はS-JISでファイルを作成してくれと言っているので、 文字化けする事を伝えて文字化けしたままとします。 有難う御座いました。 |
1