2013-11-09 4 views
2

파이썬 프로그래밍 언어를 사용하여 å, ä 및 ö와 같은 문자를 출력하는 데 문제가 있습니다. (?) :물음표로 나타나는 특수 문자

#coding: iso-8859-1 
input = "å" 
print input 

다음 코드는 당신이 입력 임의의 텍스트를 할 수 있습니다 다음 코드는 나에게 출력이 아닌 A와 물음표를 제공합니다. for-loop는 입력의 각 문자를 통해 문자열 변수 a에 추가 한 다음 결과 문자열을 출력합니다. 이 코드는 올바르게 작동합니다. å, ä 및 ö를 입력 할 수 있으며 출력은 여전히 ​​정확합니다. 예를 들어, "år"은 "år"을 예상대로 출력합니다. 흥미로운 무엇

#coding: iso-8859-1 
input = raw_input("Test: ") 
a = "" 
for i in range(0, len(input)): 
    a = a + input[i] 
print a 

은 그 내가 input = raw_input("Test: ")input = "år"을 변경하는 경우, 출력됩니다 "A"에 대한 물음표 (?).

#coding: iso-8859-1 
input = "år" 
a = "" 
for i in range(0, len(input)): 
    a = a + input[i] 
print a 

나는 가치있는 것을 위해 TextWrangler를 사용하고 있으며 내 문서의 문자 인코딩은 ISO Latin 1로 설정되어 있습니다. 문제를 어떻게 해결할 수 있습니까?

+0

'print u "år"'을 시도 했습니까? – Farhadix

+0

사용자 입력이 항상 유니 코드로 인코딩된다는 것을 의미합니까? –

답변

2

당신은 Python 2를 사용하고 있습니다. UTF-8에서 I/O를 인코딩하는 Linux와 같은 플랫폼에서 실행된다고 가정합니다.

파이썬 2의 "" 리터럴은 바이트 문자열을 나타냅니다. 따라서 ISO 8859-1로 인코딩 된 소스 파일에 "år"을 지정하면 input 변수의 값은 b'\xe5r'입니다. print이되면 raw 바이트는 콘솔에 출력되지만 유효한 UTF-8이 아니므로 물음표로 표시됩니다.

print a 대신 print repr(a)으로 시연하십시오.

raw_input()을 사용하면 사용자의 입력이 이미 UTF-8로 인코딩되어 있으므로 올바르게 출력됩니다.

  • 은 인쇄하기 전에 UTF-8로 문자열을 인코딩 :

    중 하나,이 문제를 해결하려면

    print a.encode('utf-8') 
    
  • 유니 코드 문자열 (u'text') 대신 바이트 문자열을. 파이썬 2에서는 raw_input()이 텍스트 문자열이 아닌 바이트 문자열을 반환하므로 입력을 디코딩 할 때주의해야합니다. 입력이 UTF-8 인 경우 raw_input().decode('utf-8')을 사용하십시오.

  • 소스 파일을 iso-8859-1 대신 UTF-8로 인코딩하십시오. 그러면 바이트 문자열 리터럴은 이미 UTF-8이됩니다.

+0

대단히 감사합니다! .decode ('utf-8') 부분을 추가함으로써 문제가 해결되었습니다. 고마워요! :) –