ひまつぶし雑記帖

doncha.net制作・発行:KindleやiBooks、楽天kobo、BOOK☆WALKERで読む電子書籍

utf16からutf8に変換

2019/4/25 [13:30:05] (木) 天気

管理ページからダウンロードしたデータがNNNNN.csvという名前なのに、中をみるとタブ区切りでびっくりしてたんだけど、perlでいつものようにごそごそやると文字化け。
エクセルに読み込んで別名保存すればいつもの意図通り。エクセルで保存すると文字コードはcp932、いつも通りになるからだ。

で、文字化けするタブ区切りのcsvファイルの文字コードを確認したらutf16LE BOM付き、でビックリ。ていうかなんでやねん。

これはperlで扱いにくい文字コードで、確か以前悶絶して諦めた記憶。結局一度エクセルなどに読み込ませて別名保存でcp932にしてからperlで処理していた。

今回、頻度ボリュームともけっこうあるので、こんなひと手間をかけたくない。perlだけで処理したい。

ということでぐーぐる様。

WindowsでPerlを使ってUnicode処理(1)
https://blog.livedoor.jp/numa2666/archives/52344850.html
↑こちらのサイトを参考にさせていただきました。ありがとうございます。

わたしの場合、汎用は必要なくて、入力はUTF16LE BOM付、出力はUTF8 BOMなしの決め打ち

UTF16LE BOM付を、UTF8 BOMなしに変換するサブルーチン

詳細は上記サイト参照。
ここではやってることの説明だけ。ちゃんと理解してるわけでなく、結果オーライでやってるので間違ってる可能性があるけど。

・入力はバイナリモードで読み込む必要がある。
・ファイル全部一気読みのために、入力レコードのセパレーターを殺す。
・データの頭のBOMを削除
・utf-16でデコード(スクリプトで処理するため)

perlの内部形式にデコードしてしまえば、あとはそのまま処理してもいいだろうし、他の文字コードにエンコードしてもいいし。
ここから先はいつも通り、となる。

…にしても、どうしてutf16なんてものがあるんだろう。
(perlで扱いにくいってだけなのかもしれないけど)スゲーめんどくさい。
image 

»電子書籍制作代行についてはこちら

profile

profile

 
doncha.net
contact:
»運営者
@t2aki@tokoroten.doncha.net

ところてんx5

2024/2/21 06:50

スパム騒ぎも収束したっぽいのでメンション受付のフォロー限定を解除しよう。
今回の騒ぎのおかげで、1つの投稿の中に複数のメンションがあったらスパムとして処理する、てのを実装したしな

2024/2/20 13:55

どこで漏れてるよなあ、絶対。
とりあえずdiffで差分を取るところから始めるしかなくて。でもボリュームがあるので、winmergeを使って目で追う集中力なんてもはや1mmもない。コマンドラインでdiffをを使ってその結果だけを表示させるスクリプト、というのが落としどころか。ディレ...

2024/2/20 13:42

今回、けっこうボリュームのあるものなので目で探してひとつずつ確認修正作業、なんて「絶対」(世の中には絶対はないんだけどこれは絶対)にミスが入る。
こんなことになると、結局検証用のスクリプトを書いて機械的に洗ってみることになる=余分なスクリプトを書かなきゃいけない…orz

検索
<<2024/2>>
    123
45678910
11121314151617
18192021222324
2526272829

リンク

WINDOWS版サウンドノベル
おかえりください PC WINDOWS版サウンドノベル
『おかえりください』体験版