2013-03-11 4 views
0

저는 처음부터 파이썬 프로그래머입니다. 과거에는 약간의 자바를 알고있었습니다. 일부 텍스트 파일 (터키어)과 해당 xml 파일에 의 오프셋 번호가 텍스트에 있습니다. 예를자바와 파이썬의 문자열 오프셋

-<Conn> 
    -<Span> 
     <Text>ama</Text> 
     <BeginOffset>281</BeginOffset> 
     <EndOffset>284</EndOffset> 
    </Span> 
</Conn> 

이는 txt 파일 오프셋 (offset) 281에서 'AMA'이 있다는 것을 말한다. 그러나이 파일을 파이썬으로 읽을 때 'ama'는 301 바이트에 있거나 파일의 272. 문자입니다. 지금까지 내가 아는 한, 자바 애플 리케이션은 txt 파일을 읽는 동안 어떤 인코딩을 언급하지 않습니다. 그리고 유니 코드, UTF8 등으로 파일을 읽으려고했습니다 ... 파일에서 위치를 수정하는 방법을 찾아야합니다. 내 생각 엔 문제는 터키어 문자 (다른 인코딩의 바이트 수에 차이가있을 수 있기 때문)이지만 알아 내지 못했습니다. 제안 사항은 나에게 매우 유용 할 것입니다. 감사 편집 : 내가 python3.3에서 다음 코드를 사용 :

f = open(path, encoding='utf-8') 
text = f.read() 
text[272:275] # returns 'ama' but it should be text[281:284] 
ibbyte = text.encode(encoding='utf-8') 
inbytes[292:295] # returns 'ama' but this is also incorrect 
+1

파일을 열고 읽는 데 사용하고있는 코드를 보여주십시오. –

+2

바이트가 항상 문자와 같지는 않습니다 ... – vikingsteve

+0

또 다른 차이점은 줄 끝 표시가 될 수 있습니다. 윈도우에서 그들은 2 raw 바이트입니다. – Gene

답변

0

@Gene 그것이 끝 (end-of-line) 마커 말한다한다. Windows에서 작성된 Java 응용 프로그램 이후로, 각 '\ n'을 2 바이트로 계산합니다. 하지만 파이썬은 그것들을 1 바이트로 계산합니다. 나는 '\ n'을 오프셋 숫자까지 계산하고 주어진 오프셋 숫자에서 빼낸다. 통찰력있는 의견을 보내 주셔서 대단히 감사합니다.