UTF-8変換No.32758
onga^n さん 13/12/02 16:50
 

SJIS で書かれたファイルを 以下のようなマクロで UTF-8 に変換すると
変換後のファイルが文字化けしています。
マクロではなく マニュアルで UTF-8 形式保存すると,文字化けは
起きません。
この問題はどうやったら解決できるでしょうか。

----------サンプルマクロ 内容
    openfile "D:\\temp\\test\\時計草1.txt";
    saveas   "D:\\temp\\testc\\時計草1.txt", utf8;

----------ファイル「時計草1.txt」の内容 (空行を含め4行あります)
時計草1.jpg

96.06

----------end ファイルの内容

「時計草1」をたとえば「事務所1」などとすると,この現象は
起きないようです。
また 1行目だけの内容 (2〜4行目を削除) だとやはり起きないようです。

[ ]
RE:32758 UTF-8変換No.32759
秀丸担当 さん 13/12/02 17:12
 

このファイルをUTF-8で保存すると、Shift-JISとしても間違いではなく、UTF-8
としても間違いではないファイルとなるようです。
その場合どちらも正しいということになり、判断はファイル内容の解析の具合に
よるということになります。

確実にするには、UTF-8でBOMを付けるといいです。
保存のほうを

    saveas   "D:\\temp\\testc\\時計草1.txt", utf8, bom;

とすると、BOMが付いて、判断が正確になります。

または、秀丸エディタの自動判定の具合を変えるには、設定があります。
[その他]→[動作環境]で左下の「上級者向け設定」をONにして、
[その他]→[動作環境]→[ファイル]→[エンコード1]で、
「優先順位に従う(2回読み込みが働くことがあります)」にして、UTF-8を上位
にもってくるとUTF-8として認識されやすくなります。
「候補の一覧を表示」にすると、マクロの場合は互換性の関係で候補は出ません
が、普通に「開く」などから開くと、Shift-JISとUTF-8の両方に適合しているこ
とが表示され、正しいと思わしいほうを任意に選択することができます。

[ ]
RE:32759 UTF-8変換No.32760
秀丸担当 さん 13/12/03 08:48
 

たびたびすみません。
読み込み時に問題になるというだけではありませんでした。
saveasしたそのタイミングで内容が変わるということが問題でした。
saveasしてエンコードの種類が切り替わるときなど、フォントの文字セット変更
などの関係で内部的に再読み込みされ、そのときにエンコードの再解析が行われ
ることになってしまっていました。

これはV8.13で追加されたオプションで[その他]→[動作環境]→[ファイル]→[排
他制御]の「再読み込み時にエンコードの種類を自動判定しなおす」の影響でそ
うなっていて、これをOFFにすると、saveasのタイミングでの問題も回避できま
す。
このオプションに関わらず、saveasでは再解析されないようにV8.33の次のβ版
で修正させていただきます。

[ ]
RE:32759 UTF-8変換No.32761
onga^n さん 13/12/03 22:33
 
ありがとうございました。
10万件以上のテキストファイルを UTF-8 に変換する必要に迫られ,
マクロが思うように動作せず 困り果てていました。
BOM をつけることで解決しました。


[ ]
RE:32761 UTF-8変換No.32767
いいじま さん 13/12/14 17:03
 
いいじまです。

> 10万件以上のテキストファイルを UTF-8 に変換する必要に迫られ,
> マクロが思うように動作せず 困り果てていました。
> BOM をつけることで解決しました。

こういう場合、無理に秀丸だけで処理しようとせず、外部のコマンド
ラインツールを使うのも手です。今回はnkfかlibiconvでしょうか。

以下、libiconvを使い、Excelの助けを借りるという前提で。

まず、コマンドプロンプトから次のように入力してファイル一覧を
取得します。
cd /d "c:\Users\your name\Desktop"
dir /b /on *.sj > ..\files.txt
※ファイル名にShift_JIS外の文字があるときは少し工夫が必要です。

これをExcelで読み込んで(秀丸で開いて切り貼ってもよい。
Excel 2003以下の場合は65535行以内で分割する)、隣の列に
式を書いて次のような文字列を出します。
iconv -f cp932 -t utf-8 < "No. 0001.sj" > "No. 0001.utf"

最後にこれを6万行まとめてコマンドプロンプトにコピペ!

…本当に6万行いちどに行けるかどうかは確認していませんが、
こういうテクニックもあるということで。

[ ]
RE:32767 UTF-8変換No.32768
いいじま さん 13/12/14 17:08
 
いいじまです。たびたびすいません。

>> 10万件以上のテキストファイルを UTF-8 に変換する必要に迫られ,
>> マクロが思うように動作せず 困り果てていました。

> 以下、libiconvを使い、Excelの助けを借りるという前提で。

と書きましたが、

> これをExcelで読み込んで(秀丸で開いて切り貼ってもよい。

せっかく秀丸で開いたのだから、Excelに頼る必要はないですね。
正規表現置換を使ってファイル名だけのリストから

> iconv -f cp932 -t utf-8 < "No. 0001.sj" > "No. 0001.utf"

という行を生成し、拡張子cmdで保存して、バッチファイルとして起動。
これなら6万行の制限はありません。

[ ]