2017-01-11 16 views
-1

へのファイル:それをテストした後エンコード私はUTF8エンコードにASCIIからcsvファイルをエンコードしたい、これは私が試したコードであるASCIIからUTF8

import codecs 
import chardet 
BLOCKSIZE = 9048576 # or some other, desired size in bytes 

with codecs.open("MFile2016-05-22.csv", "r", "ascii") as sourceFile: 
    with codecs.open("tmp.csv", "w", "utf-8") as targetFile: 
     while True: 
      contents = sourceFile.read(BLOCKSIZE) 
      if not contents: 
       break 
      targetFile.write(contents) 


file = open("tmp.csv", "r") 
try: 
    content = file.read() 
finally: 
    file.close() 
     encoding = chardet.detect(content)['encoding'] 
print encoding 

を、私はまだで「ASCII」を取得エンコーディングの値エンコーディングは変更されませんでした。私は何が欠けていますか?

+1

任意のASCIIファイルがすでに有効なUTFです-8ファイル。実際、ほとんどすべてのエンコーディング(ASCIIベース)では有効です。 – deceze

答えて

0

ASCIIは、UTF-8のサブセットです。 ASCIIエンコードされたファイルも有効なUTF-8です。 Wikipedia article on UTF-8から

:一対一のASCIIとを対応ユニコードの

最初の128の文字は、ASCIIと同じバイナリ値を有する単一のオクテットを用いて符号化されるように、有効なASCIIテキスト有効なUTF-8エンコードされたUnicodeでもあ​​ります。

つまり、操作はノーオペレーションで、何もに変更する必要はありません。

コーデックを検出するツール(chardetなど)は、そのままASCIIとしてマークします。それをUTF-8としてマークすることも有効ですが、ISO-8859-1(Latin-1)またはCP-1252(Windows Latin-1ベースのコードページ)としてマークするか、またはスーパーセットの任意の数のコーデックASCII。しかし、あなたのデータはASCIIコードポイントのみで構成されているので、混乱するでしょう。 ASCII を受け入れるツールはしか受け入れませんが、CSVファイルはASCIIコードポイント以上のUTF-8データを受け入れません。

目標は、テキストのどの作品はchardetを使用することにより、有効なUTF-8である、あなたはあまりにもASCIIを受け入れなければならないだろうということを検証する場合:

def is_utf8(content): 
    encoding = chardet.detect(content)['encoding'] 
    return encoding in {'utf-8', 'ascii'} 
+0

ASCIIの代わりにテスト結果utf-8で表示することは可能ですか? – JavaQueen

+0

@Cloudgls:どのテスト結果ですか?あなたは、あなたがテストするために使っていることを私たちに全く示さなかった。 CP-1252のように 'Latin-1'も有効であることに注意してください。多くのエンコーディングの基礎としてASCIIが使用されています。 ASCIIコードポイントのみを使用するテキストは、多くのスーパーセットの1つではなく、ASCIIとして最もよくマークされます。 –

+0

'print encoding'の結果 – JavaQueen

0

ASCIIはUTF-8のサブセットです。すべてのASCIIファイルは自動的にUTF-8になります。何もする必要はありません。

関連する問題