2012-09-11 2 views
2

내 파일은 US-ASCII이고, a = file('main.html')a.read()과 같은 명령은 ASCII 텍스트로로드합니다. UTF8로로드하려면 어떻게해야합니까?아스키 인코딩 파일을 UTF8로 여는 방법은 무엇입니까?

내가 해결하기 위해 트링하고 문제는 : 나는 template_str.format(attrib=val) 같이 템플릿에 대한 파일의 내용을 사용했다

UnicodeEncodeError: 'ascii' codec can't encode character u'\xae' in position 38: ordinal not in range(128) 

. 그러나 보간 할 문자열은 ASCII의 상위 집합입니다.

Google 팀의 버전 제어 및 텍스트 편집기는 인코딩에 신경 쓰지 않습니다. 그렇다면 코드에서 어떻게 처리 할 수 ​​있습니까?

+3

ASCII는 UTF-8의 하위 집합입니다. 그러나 나는 여기에 게시하거나 이해 한 것보다 문제에 더 많은 것이 있다고 생각합니다. –

+1

제발,이 우수한 [유니 코드 기사] (http://www.joelonsoftware.com/articles/Unicode.html)와 파이썬 [유니 코드 하우투] (http://docs.python.org/howto /unicode.html), 질문을 수정하십시오 (아직 가지고 있다면). –

+0

@MartijnPieters 나는 원래 문제를 포함했다. \ – aitchnyu

답변

5

.

당신은 .decode() 기능을 사용하여 명시 적으로 바이트 문자열을 디코딩 할 필요가 : 당신이 당신의 템플릿에 보간을 시도

template_str = template_str.decode('utf8') 

귀하의 val 변수가 유니 코드 값 자체를, 그리고 파이썬은 자동으로 바이트를 변환하고 싶어 -string (파일에서 읽음) 템플릿을 유니 코드 값으로 변환하여 둘을 결합 할 수 있도록 기본 인코딩을 사용합니다.

조엘 스폴 스키의 article on UnicodePython Unicode HOWTO을 읽어야합니다. 그들은 당신이 여기에서 일어난 일을 이해하도록 도와 줄 것입니다.

+0

일반적인 '®'(올바르게 실행 한 후에 배운)로 인해 코드가 손상 될 수 있습니다. 나는 ** bug **처럼 치료하려고 노력 했었습니다. 여기 20 시가되어서 화가났습니다.나는 그것을 읽고 전체 팀에게 추천 할 것입니다. 너를 빚 졌어! – aitchnyu

1

파일이 ASCII로 인코딩되었다고 가정합니다. 너? :) ASCII가 UTF-8에 포함되어 있으므로 문제를 예상하지 않고 UTF-8을 사용하여이 데이터를 디코딩 할 수 있습니다. 그러나 데이터가 ASCII 일 뿐이라면 UTF-8이 아닌 ASCII 만 사용하여 데이터를 디코딩해야합니다.

"UTF8로로드하려면 어떻게해야합니까?"

"유니 코드로로드하려면 어떻게해야합니까?"라고 생각합니다. 은 ASCII 코덱을 사용하여 데이터를 디코딩하고 Python 2.x에서는 결과 데이터 형식이 unicode입니다. 파이썬 3에서 결과 데이터는 str입니다.

파이썬에서 이러한 종류의 디코딩을 수행하는 방법을 배우려면이 주제를 읽어야합니다. 일단 이해되면 매우 간단합니다. Python2에서 작업

+2

예,'file -bi'는 인코딩을 위해'charset = us-ascii'를 반환합니다. – aitchnyu

+0

이제 더 많은 정보를 추가 했으므로 파일이 실제로 ASCII 인코딩되지 않았 음을 알 수 있습니다. –

4

해결책 : 당신은 파이썬 기본 값 (ASCII)를 사용한다는 것을 의미 인코딩을 지정하지 않고 파일을 열하려고하는

import codecs 
fo = codecs.open('filename.txt', 'r', 'ascii') 
content = fo.read() ## returns unicode 
assert type(content) == unicode 
fo.close() 

utf8_content = content.encode('utf-8') 
assert type(utf8_content) == str 
관련 문제