2017-01-11 5 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"를 얻을 encode의 값 인코딩이 변경되지 않았습니다. 내가 뭘 놓치고 있니?

+1

-8 파일. 사실, 거의 모든 인코딩 (ASCII 기반)에서 유효합니다. – deceze

답변

0

ASCII는 UTF-8의 하위 집합입니다. ASCII 인코딩 파일도 유효한 UTF-8입니다. Wikipedia article on UTF-8 가입일

: 일대일 ASCII와 대응 유니 코드

첫 128 개 문자는, ASCII와 동일한 이진 값을 하나의 옥텟을 사용하여 인코딩되도록 유효 ASCII 텍스트 는 유효한 UTF-8 인코딩 유니 코드입니다.

다른 말로하면 조작은 아무 것도 아니며 아무런 변화가 없습니다. 이어야합니다.

코덱을 감지하는 도구 (예 : chardet)는 올바르게 ASCII로 표시됩니다. UTF-8로 표시하는 것은 유효하지만 ISO-8859-1 (Latin-1) 또는 CP-1252 (Windows 라틴 -1 기반 코드 페이지)로 표시하거나, 또는 수퍼 코드 인 코덱 ASCII. 그러나 데이터가 ASCII 코드 포인트로만 구성되기 때문에 혼란 스럽습니다. ASCII 만 허용하는 도구는 ASCII 코드 포인트 이상으로 구성된 UTF-8 데이터를 허용하지 않지만 CSV 파일을 허용합니다 ( 만 허용).

목표는 텍스트의 어떤 조각을 확인하는 경우

chardet를 사용하여 유효한 UTF-8, 당신은 너무 ASCII에 동의해야합니다 :

은 모든 ASCII 파일이 이미 유효한 UTF이다
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 코드 포인트 만 사용하는 텍스트는 여러 수퍼 집합 중 하나가 아닌 ASCII로 표시하는 것이 가장 좋습니다. –

+0

'print encoding'의 결과 – JavaQueen

0

ASCII는 UTF-8의 하위 집합입니다. 모든 ASCII 파일은 자동으로 UTF-8입니다. 아무 것도 할 필요가 없습니다.