2013-06-10 4 views
0

약간의 chomped가 발생하는 유니 코드 문자에 문제가 있습니다. 변수가 location 인 구성 파일이 있습니다. 구성 파일의 상단에 # -*- coding utf-8 -*-이 있지만 은 인코딩이 us-ascii이고 어떤 작업을 수행하든 (iconvrecode (Linux) 포함) 변경을 거부합니다.어딘가에서 유니 코드 문자를 분실하고 있습니다 (Python3)

어쨌든, 나는 (유니폼 문자가 아래에 input_data으로 전달 된) 어떤 데이터를 검색하고 데이터를 직접 볼 때 잘 보입니다. 그러나, 어딘가에 다음에 내가 그것을 씹어 :

def make_message(input_data): 

    messagestring = '' 

    if isinstance(input_data, list): 
     messagestring = '\n'.join(input_data) 

    elif isinstance(input_data, dict): 
     for key, val in input_data.items(): 
      messagestring += key + '\n' 
      if isinstance(val, dict): 
       for newkey, newval in val.items(): 
        messagestring += newkey + ' ' + newval + '\n' 
      else: 
       messagestring += val + '\n' 
    return messagestring 

을 나중에, 나는 다음과 같은 방법으로이 전화 :

weather_msg = location + '\n' + make_message(message) 

내가 내 config 파일의 인코딩 (여기서 "위치"오는 생각 from)은 전체 문자열을 ascii로 바꾸도록 강요하지만 이것은 단지 추측이며 내 인터넷 검색에서 일이 어떻게 이루어지는 지 알아낼 수 없습니다.

location을 인코딩하는 것을 포함하여 여러 가지를 시도했지만 문자 인코딩을 많이 봤지만 다시 유니 코드 문자를 가져올 수 없으며 씹고있는 부분을 파악할 수 없습니다. 그들을 위로.

누구나 명백한 실수를 보면서 내가 유니 코드 데이터를 ascii로 강제 변환 할 수 있습니까? 또는 파일에이 내용을 모두 적어두고 더 똑똑한 방법으로 인코딩 문제를 해결할 수 있는지 이메일로 보낼 수 있습니다. 정보가 충분히 짧아서 나는 그것을 단지 기억에 남기고 있었지만, 나는 이것이 일을하는 바보 같은 방법이라고 들었습니다.

읽기와 제안 사항을 보내 주셔서 감사합니다.

+0

및 설정 파일을 작성 , 그것은 문제가있는 것처럼 들리는 곳입니다. – abarnert

+0

또한,'messagestring'은 그 함수를 종료 할 때'str' (유니 코드를 의미)이어야합니다. 그게 아니라고 생각하는 것을 보는 것은 무엇입니까? – abarnert

+0

설정 파일을 작성했습니다. 나는 아직 그것을 창조하는 부분을 코딩하지 않았다. 또한, 내가 생각한 메시지 전달에 대해 언급 한 내용은 틀림없이 틀림없이 받아 들여져 야합니다.하지만이 텍스트는 'Air Temp 66.4 (사각형 물음표) (사각형 물음표)'가됩니다. – erewok

답변

3

파이썬은 소스 파일의 코딩 선언 주석 만 존중하며 데이터 파일은 열지 않습니다.

open(config_path) 

이 ... 이렇게 :

당신이 대신에, 설정 파일을 엽니 다 어디

당신은 우리에게 이상이 열립니다 읽는 코드를 표시하지 않은

open(config_path, encoding='utf-8') 
+0

이것은 나를 보면서 잊어 버렸기 때문에 이것은 나를위한 이마 슬랩 순간이었다. 구성 파일을 구문 분석하기 위해 ConfigParser를 사용하고 있었으며 공식적으로 열지 않았습니다. 그러나 인터넷 검색을 시작했을 때, 다른 사람들이 ConfigParser에서 utf-8을 읽는 데 문제가 있음이 밝혀졌습니다. 사실 스택 오버플로에서는 여기에 몇 가지 스레드가 있습니다. 수신기에 문제가 있다는 것을 알게됩니다. 데이터가 전자 메일로 전송되는 다른 모든 테스트 주소는 올바르게 인코딩됩니다. 그래서 내 측면에서 다양한 "수정 사항"을 시도했지만 다른 행동을 취할 수 없었습니다. – erewok

+0

그런 경우 특정 인코딩을 전달하는 것이 아니라 ['ConfigParser.read'] (http://docs.python.org/3.3/library/configparser.html#configparser.ConfigParser.read)입니다. '열린 '...하지만 달리, 같은 거래. (파이썬 3.0-3.1을 사용하고 있고 업그레이드 할 수 없다면 수동으로 파일을 열어'readfp'에 넘겨 주어야합니다.) – abarnert

관련 문제