|
|
2024/11/15(Fri) 22:02:38|NO.102545
csvファイルにして書き出すのですがANSIではなくて、UTF-8で書き出す方法がわからず教えてください。
過去ログにもあるのだと思うのですが探しかねています。
作成しているプログラムでは今まで全てANSIで扱っておりhsp3utf.asをincludeできません。
ひとつのファイルだけUTF-8にして出力する必要がでてきたのです。
以下は一部分を切り出してコンパクトにしたサンプルです。
ご教授よろしくお願いいたします。
sdim write_buffer , 200 ;csv 書き出しbuffer
sdim data_buf , 200,4,4 ;元データ,4cell x 4行
;テストデータ生成
data_buf(0,0)="あ":data_buf(0,1)="い":data_buf(0,2)="う":data_buf(0,3)="え"
data_buf(1,0)="あい":data_buf(1,1)="うえ":data_buf(1,2)="おか":data_buf(1,3)="きく"
data_buf(2,0)="けこ":data_buf(2,1)="さしすせ":data_buf(2,2)="そ":data_buf(2,3)="たち"
data_buf(3,0)="つ":data_buf(3,1)="てと":data_buf(3,2)="123":data_buf(3,3)=str(456)
repeat 4
write_buffer += data_buf(cnt,0)+","+data_buf(cnt,1)+","+data_buf(cnt,2)+","+data_buf(cnt,3)+"\n"
loop
dialog "csv",17
if stat=0 : end
notesel write_buffer
notesave getpath(refstr,1) +".csv"
noteunsel
stop
|
|
2024/11/15(Fri) 23:19:12|NO.102546
文字コード変換だけにはやや贅沢ですがhspinetでできます
実行ファイルを配布する際にhspinet.dllの同梱が必要になりますのでご注意ください
#include "hspinet.as"
sdim write_buffer , 200 ;csv 書き出しbuffer
sdim data_buf , 200,4,4 ;元データ,4cell x 4行
;テストデータ生成
data_buf(0,0)="あ":data_buf(0,1)="い":data_buf(0,2)="う":data_buf(0,3)="え"
data_buf(1,0)="あい":data_buf(1,1)="うえ":data_buf(1,2)="おか":data_buf(1,3)="きく"
data_buf(2,0)="けこ":data_buf(2,1)="さしすせ":data_buf(2,2)="そ":data_buf(2,3)="たち"
data_buf(3,0)="つ":data_buf(3,1)="てと":data_buf(3,2)="123":data_buf(3,3)=str(456)
repeat 4
write_buffer += data_buf(cnt,0)+","+data_buf(cnt,1)+","+data_buf(cnt,2)+","+data_buf(cnt,3)+"\n"
loop
dialog "csv",17
if stat=0 : end
nkfcnv write_buffer_utf8, write_buffer, "wS", strlen(write_buffer)
bsave getpath(refstr,1) +".csv", write_buffer_utf8, strlen(write_buffer_utf8)
stop
|
|
2024/11/16(Sat) 11:21:07|NO.102548
hspinet.asをincludeしてnkfcnvコマンドを使うとのアドバイスありがとうございます。
早速やってみましたが、書き出したcsvを開くと、下記のように文字化けしているのです。
- - - - - - - - - - - - -
縺・縺・縺・縺・
縺ゅ> 縺・∴ 縺翫° 縺阪¥
縺代% 縺輔@縺吶○ 縺・縺溘■
縺、 縺ヲ縺ィ ・托シ抵シ・456
- - - - - - - - - - - - -
このcsvを新規Excelに「インポート」するとプレビュー画面で「元のファイル」の表示が
「Unicode(UTF-8)」と表示されてるので、bsaveでは正しくUTF-8で書き出されたかと
思うのですが、書き出したcsvを開くと文字化けしてしまうのは、なぜなのでしょうか?
|
|
2024/11/16(Sat) 13:04:54|NO.102549
ExcelでUTF-8なCSVファイルを読み込む際は先頭にBOMをつけないと、
Shift_JISと認識してしまい文字化けてしまいます。
バイト順マーク
https://ja.wikipedia.org/wiki/%E3%83%90%E3%82%A4%E3%83%88%E9%A0%86%E3%83%9E%E3%83%BC%E3%82%AF
例えば、以下のようにするとBOM付きで保存できます。
#include "hspinet.as"
sdim write_buffer , 200 ;csv 書き出しbuffer
sdim data_buf , 200,4,4 ;元データ,4cell x 4行
;テストデータ生成
data_buf(0,0)="あ":data_buf(0,1)="い":data_buf(0,2)="う":data_buf(0,3)="え"
data_buf(1,0)="あい":data_buf(1,1)="うえ":data_buf(1,2)="おか":data_buf(1,3)="きく"
data_buf(2,0)="けこ":data_buf(2,1)="さしすせ":data_buf(2,2)="そ":data_buf(2,3)="たち"
data_buf(3,0)="つ":data_buf(3,1)="てと":data_buf(3,2)="123":data_buf(3,3)=str(456)
repeat 4
write_buffer += data_buf(cnt,0)+","+data_buf(cnt,1)+","+data_buf(cnt,2)+","+data_buf(cnt,3)+"\n"
loop
dialog "csv",17
if stat=0 : end
nkfcnv write_buffer_utf8, write_buffer, "wS", strlen(write_buffer)
filename = getpath(refstr,1) +".csv"
bom = 0x00BFBBEF
bsave filename, bom, 3
bsave filename, write_buffer_utf8, strlen(write_buffer_utf8), 3
stop
|
|
2024/11/16(Sat) 16:45:48|NO.102552
正造様、TOMATO様 お二人の助言、大変ありがとうございました。
お陰様で目的のcsvファイルとして書き出せるようになりました。
この掲示板の有用さにも大変感謝いたします。
|
|