2016-04-27 42 views
1

サイトとアドレスを含むCSVファイルがあります。 Djangoでデータベースに初期データをロードするために使用するjsonファイルを生成するには、このファイルで作業する必要があります。そのためには、CSVファイルのすべての特殊文字をUnicodeエスケープ文字に変換する必要があります。ここでユニコード文字をユニコードエスケープシーケンスにエンコードする

は一例です:

Örnsköldsvik;SE;Ornskoldsvik;Ångermanlandsgatan 28 A 

に変換する必要があります。以下のサイトは、私が期待してい正確に変換やっている

\u00D6rnsk\u00F6ldsvik;SE;Ornskoldsvik;\u00C5ngermanlandsgatan 28 A 

http://itpro.cz/juniconv/をしかし見つけたいI'deコマンドライン(bash)またはPythonでそれを行う方法。私はすでにiconvuconvといくつかのPythonスクリプトを使って実際に成功しなかった。

juniconvのウェブサイトには、どのような種類のスクリプトが実行されていますか?

ご提案ありがとうございます。

+0

* "これを行うには、CSVファイルのすべての特殊文字をUnicodeエスケープ文字に変換する必要があります。"あなたが文字セットについて一貫していることを保証すれば(UTF-8はほぼすべての西洋のテキストのための良い選択です)、必要はありません。 –

+0

実際には、データを './manage.py dumpdata app.model> dump.json'でダンプすると、これはデータが' dump.json'にエンコードされる方法です。これが私がデータをロードするのと同じフォーマットをしたいのです。 –

+0

JSON出力をしたいのであれば、 'json.dump()'を使わないのはなぜですか? '\ u'エスケープだけでなく、JSON文字列リテラル出力を生成する方法があります。 – bobince

答えて

1

...あなたはUTF-8文字列を持っていると仮定します。あなたはuse JSON formatできます

>>> import json 
>>> import sys 
>>> s = u'Örnsköldsvik;SE;Ornskoldsvik;Ångermanlandsgatan 28 A' 
>>> json.dump(s, sys.stdout) 
"\u00d6rnsk\u00f6ldsvik;SE;Ornskoldsvik;\u00c5ngermanlandsgatan 28 A" 

ありunicode-escapeコーデックは、またですが、あなたがそれを使用しないでください:それはエスケープのPython固有の生成(PythonのUnicode文字列リテラルはどのように見えるか):

>>> print s.encode('unicode-escape') 
\xd6rnsk\xf6ldsvik;SE;Ornskoldsvik;\xc5ngermanlandsgatan 28 A 
+0

まさに私が探していたものです!たくさんのこと。 –

0

多分このようなものがあなたを助けるかもしれませんか?あなたはPythonでUnicode escapes similar to Javaを取得したい場合は、私は

import csv 
csv_reader = csv.reader(utf8_data) 
for row in csv_reader: 
    encoded_row = [unicode(cell, 'utf-8') for cell in row] 
    #print(encoded_row) 
+0

お手伝いをしていただきありがとうございますが、これは私が探しているものではありません。 Unicodeエスケープ表記( '\ u ....')の代わりに、 '\ xd6rnsk \ xf6ldsvik; 208; Ornskoldsvik; \ xc5ngermanlandsgatan 28 A' –

+0

もっと適切な解決策を見つけている間に、すべての特殊文字は次のようになります: 'iconv -f utf-8 -t ASCII // TRANSLIT < input.csv > output.csv' –

0

あなたがすることができますGNUのlibiconvをの--unicode-SUBSTオプションでそれを行う:

$ echo 'Örnsköldsvik;SE;Ornskoldsvik;Ångermanlandsgatan 28 A' | \ 
    iconv -t ASCII --unicode-subst='\u%04X' 
\u00D6rnsk\u00F6ldsvik;SE;Ornskoldsvik;\u00C5ngermanlandsgatan 28 A 

ところで、GNUのlibiconvをもこれを行いJAVAと呼ばれる擬似コード化を持っている:

$ echo 'Örnsköldsvik;SE;Ornskoldsvik;Ångermanlandsgatan 28 A' | \ 
    iconv -t JAVA 
\u00d6rnsk\u00f6ldsvik;SE;Ornskoldsvik;\u00c5ngermanlandsgatan 28 A 

注:GNUのlibiconvをがないのiconvは、glibcので付属しました。 glibcのiconvは目的の99%と同じくらい良いので、通常はglibcシステムにインストールされていない別のパッケージです。

関連する問題