utf16からutf8に変換

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

管理ページからダウンロードしたデータがNNNNN.csvという名前なのに、中をみるとタブ区切りでびっくりしてたんだけど、perlでいつものようにごそごそやると文字化け。

エクセルに読み込んで別名保存すればいつもの意図通り。エクセルで保存すると文字コードはcp932、いつも通りになるからだ。


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


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


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


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


WindowsでPerlを使ってUnicode処理(1)

http://blog.livedoor.jp/numa2666/archives/52344850.html

↑こちらのサイトを参考にさせていただきました。ありがとうございます。


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


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


sub conv_utf16{
    my $args = shift;

    open(IN, $args->{file}) || die;
    binmode IN=>":raw";
    local undef $/;
    my $data = readline(IN);
    $data =~ s!^\xFE\xFF!!;
    $data = Encode::decode(’utf-16’, $data);
    $data = Encode::encode(’utf8’, $data);
    return $data;
}

詳細は上記サイト参照。

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


・入力はバイナリモードで読み込む必要がある。

・ファイル全部一気読みのために、入力レコードのセパレーターを殺す。

・データの頭のBOMを削除

・utf-16でデコード(スクリプトで処理するため)


perlの内部形式にデコードしてしまえば、あとはそのまま処理してもいいだろうし、他の文字コードにエンコードしてもいいし。

ここから先はいつも通り、となる。


…にしても、どうしてutf16なんてものがあるんだろう。

(perlで扱いにくいってだけなのかもしれないけど)スゲーめんどくさい。

image

書誌情報データを求めて三千里

2019/4/3 [09:18:16] (水) 天気

一昨日、新元号の発表があった4月1日に国立国会図書館の書誌データAPIが解禁となった。

今までも検索などに使えていたけど、データベースとしてガツガツ使うには登録が必要だったり面倒くさかったのが、4月1日からは誰でも自由に使ってもかまわんぜ!になった。


てことで、今さら国立国会図書館の書誌データAPIをごそごそ覗いてみた。


国立国会図書館サーチについて>API仕様の概要

https://iss.ndl.go.jp/information/api/riyou/


わたしの、というかわたしが公開しているサイトの使い方は前にも書いた通り。

「ISBNをキーにして書誌データと書影URLを取得したい」

たとえば、スティーヴン・キングの『シャイニング』

ISBNは978-4167705633


これを国立国会図書館のAPIで探すには以下

https://iss.ndl.go.jp/api/opensearch?isbn=978-4167705633

→書誌情報のXMLが返ってくる

https://iss.ndl.go.jp/api/openurl?isbn=978-4167705633

→検索結果ページが返ってくる

https://iss.ndl.go.jp/api/sru?operation=searchRetrieve&maximumRecords=10&query=isbn%3d9784167705633

→書誌情報XMLが返ってくる(このsruはさらに細かく検索方法の指定もできる)


うちの場合、必要な書誌情報はopensearchで十分。

著者についてももろもろ考慮されて(同性同名や読みなど)おり、データのクオリティは信用できる。さすが。

https://www.ndl.go.jp/jp/data/faq/author.html


蔵書のある図書館の情報なども取得できるので、位置情報と合わせて「目当ての本がある最寄りの図書館」なんて検索も実装できるし、その手のアプリがすでにあるのは、国会図書館のデータが元ネタじゃないかな。


だけど、書影がないのはほんと残念。

本棚を眺める楽しみのひとつ、というか欠かせないのが表紙だもんなあ。

基本的な書誌情報は国立国会図書館で、書影・表示画像はamazonなどのショップサイトのURLを別途取得…とか1冊の本のために2回も外部にリクエストしてるとサイトの表示がもたつく原因になってしまう。


てことで、うちのサイトのデータ取得方法は現状のままとする。

国会図書館のデータはまた何か別の用途で利用させてもらおう。しっかりとしたデータは見ていて気持ちいい(データオタク)



ちなみに。

「一般社団法人 日本出版インフラセンター」という版元主導のところも3月25日に書誌データベースのサイトをオープンしたけど、APIもなく、手入力でポチポチ検索できるだけ、なのでスルー。

image
<<2019/04>>
 123456
78910111213
14151617181920
21222324252627
282930

【最近の10件】

日常読書映画アニメゲーム健康料理グルメカメラ写真ネタ仕事パソコンインターネットperlEPUB3電子書籍ActivityPub還暦生活
検索: