2012-02-08 4 views
0

절대 경로를 사용하는 다른 파일을 참조하는 바이너리 파일로 작업하고 있습니다. 경로에 일본어와 ASCII 문자가 모두 들어 있습니다.파이썬 3.x에서 혼합 된 인코딩으로 문자열 작업하기

문자열의 길이가 주어 지므로 많은 바이트를 읽고 문자열로 변환 할 수 있습니다.

그러나 문제는 문자열을 변환하려고하는 것입니다. 인코딩을 ascii로 지정하면 일본어 문자가 실패합니다. japanese encoding (shift-jis 또는 뭔가)으로 지정하면 영어 문자를 제대로 읽을 수 없습니다.

각 ASCII 문자에는 1 바이트가 사용되고 각 일본어 문자에는 2 바이트가 사용됩니다.

이 바이트를 문자열로 변환하는 가장 빠르고 깨끗한 방법은 무엇입니까? 인코딩은 알려져 있습니다. 파이썬의 이전 버전에서도 같은 기술을 사용할 수 있습니까?

+1

인코딩을 혼합하지 마십시오. utf-8을 모든 것에 사용하십시오. – geoffspear

+1

내가 읽는 소스가 모든 것을 위해 utf-8을 사용하지 않는다면 그것은 작동하지 않을 것입니다. 다른 많은 파일들은 utf-8을 사용하지 않는 개발자 (중국어, 일본어 또는 한국어)가 있습니다. – MxyL

+0

mybytestring.decode ('shift-jis')를 사용하면 작동하지 않습니까? 시프트 - jis는 실제로 표준이 아니더라도 \ 및 ~ 문자를 제외하고는 ascii와 이론적으로 호환됩니다. – gps

답변

3

유니 코드와 인코딩의 기본 사항에 대한 오해 때문에 희생 된 것처럼 들립니다. 당신이하지 않았을 수도 있지만, 오해는 일반적이며 이해할 수있는 반면, 당신이 설명하는 상황은 그렇지 않습니다.

혼합 인코딩을 포함하는 바이트 문자열은 정의에 따라 이러한 인코딩 중 하나에서 유효하지 않습니다. 이것이 사실이라면 바이트 문자열을 부분으로 분할하고 모든 부분을 개별적으로 디코딩해야합니다. 이 경우에는 경로 분리 기호로 분리된다는 의미 일 수 있으므로 비교적 쉽지만 다른 경우에는 그렇지 않을 수 있습니다. 그러나 나는 그것이 당신의 원천이 제정신이 아님을 의미하기 때문에 이것이 사실이라고 의심스럽게 의심합니다. 그런 일이 일어나기는 쉽지 않습니다. :-)

소스가 경로를 바이트 문자열로 제공하는 경우이 문자열은 하나의 인코딩 만 사용하는 것이 일반적입니다. 일본어 및 ASCII 문자를 모두 포함 할 수 있으며 여전히 하나의 인코딩을 사용할 수 있습니다. 일본어와 ASCII를 모두 처리 할 수있는 가장 일반적인 인코딩은 UTF-8 및 UTF-16입니다. 내 생각 엔 당신의 출처가 그 중 하나를 사용한다는 것입니다. 사실, "한 바이트는 각 ASCII 문자에 사용되지만 두 바이트는 각 일본어 문자에 사용되지만"UTF-8 일 것입니다. Shift JIS 일 수도 있지만 이미 시도한 것 같습니다.

원본 파일이 무엇인지 설명하고 제공 한 바이트 문자열의 예 (ASCII/HEX)를 제공하십시오.

관련 문제