2013-12-12 6 views
1

다른 표현이 :두 단어가 내가 UTF-8 코딩에 표시된 경우이처럼하는 페르시아어 단어가 ASCII

"خطاب" 

나는이 단어의 두 가지 버전을 가지고, UTF-8의 Notepad ++ 모두 위와 같이 표시됩니다. 그때 ANSI 모드에서 그들을 보면 는하지만 참조 :

ïºïºŽï»„ﺧ 

와 내가 보는 다른 하나

:

خطاب  

같은 단어가 ANSI 형식으로 같은 다른 표현이 와서 어떻게? 파이썬에서 PIL을 사용하여 이들을 그릴 때, 결과 중 하나는 정확하고 다른 것은 맞지 않습니다.

감사합니다.

+1

[시스템 설정에 따라 다름] (http://stackoverflow.com/a/701920/847349). ANSI는 Farsi 코드 페이지를 포함하지 않을 수도 있습니다 –

+2

ANSI 인코딩으로 UTF-8 인코딩 파일을 해석하는 경우 물론 가비지 문자가 표시됩니다. "서로 다른 표현이있는"것이 아니라 잘못된 인코딩으로 파일을 해석하는 것입니다. [모든 프로그래머가 절대적으로, 인코딩 작업과 문자 세트에 대해 알기를 바랍니다.] (http : // kunststube.net/encoding /). – deceze

+0

@deceze 링크를 가져 주셔서 감사합니다. 확실히 읽을 것입니다. 그러나 ANSI 인코딩에서도 쓰레기가 보일 것입니다. 둘 다 동일한 쓰레기를 보여서는 안됩니까? – TJ1

답변

2

유니 코드에서는 여러 가지 문자로 표현할 수 있습니다. 이 경우 아랍어 문자는 첫 번째 경우에는 Arabic Presentation Forms-B Block의 코드 포인트로 표시되고 두 번째 경우에는 일반 Arabic Block의 코드 포인트로 표시됩니다. 당신이 바이트 스트림에

ﺧ 텍스트를

ïºïºŽï» "을 변환하면

, 당신은

EFBA 0F EFBA8E EFBB84 EFBAA7

를 얻을 수 당신이 se가 아니라는 것에주의하십시오. 시각적 문자가 아니기 때문에 위의 텍스트에서 0F 바이트를 나타내는 문자를 입력해야합니다.

이제 바이트 스트림이 UTF-8 인코딩 텍스트를 나타냅니다.

FE8F FE8E FEC4에게 FEA7

을 당신은 당신의 페르시아어 텍스트 형성하기 위해 Arabic Presentation Forms-B Block에 일치 할 수 있습니다 :

خطاب

를 다음과 같은 유니 코드 코드 포인트 당신에게 줄 것이다 디코딩

다른 텍스트에 대해서도 동일한 과정을 수행 할 수 있습니다. خطاب은 바이트 스트림 D8AE D8B7 D8A7 D8A8은 UTF-8로 인코딩 된 텍스트를 나타내며, 디코딩하면 유니 코드 코드 포인트 062e 0637 0627 0628이 제공되며 이는 Arabic Block 일반 문자와 일치하여 خطاب 텍스트를 다시 제공합니다.