파이썬 스크립트에서 유니 코드 텍스트를 RTF 파일로 출력하려고합니다. 유니 코드는 유니 코드 UTF-16 코드 단위의 수를 나타내는 16 비트 부호 첨부 10 진수의 정수가 유를 사용하는 \ 제어 워드를 탈출 배경를 들어, Wikipedia파이썬에서 RTF 파일로 유니 코드 텍스트 출력
을 말한다. 유니 코드를 지원하지 않는 프로그램의 이점을 위해서는 지정된 코드 페이지에서이 문자를 가장 가까운 표현으로 따라야합니다. 예를 들어, \ u1576? Unicode를 지원하지 않는 구형 프로그램이 대신에 물음표로 나타내야한다는 것을 명시하는 아랍 문자 bā'b를 제공합니다.
this question on outputting RTF from Java 및 this one on doing so in C#도 있습니다.
그러나 내가 알 수없는 것은 파이썬에서 유니 코드 코드 포인트를 "유니 코드 UTF-16 코드 유닛 번호가있는 16 비트 부호있는 10 진 정수"로 출력하는 방법입니다. 나는 이것을 시도했다 :
for char in unicode_string:
print '\\' + 'u' + ord(char) + '?',
그러나 출력은 워드 프로세서에서 열었을 때 횡설수설로 표현된다. 문제는 그것이 UTF-16 코드 번호가 아닌 것으로 보입니다. 그러나 그것을 얻는 방법을 모릅니다. 하나는 utf-16으로 인코딩 할 수 있지만 코드 번호는 어떻게 얻을 수 있습니까?
덧붙여서 PyRTF는 유니 코드 ("todo"로 표시됨)를 지원하지 않으며 pyrtf-NG가 그렇게하기로되어 있지만 해당 프로젝트가 유지 관리되지 않는 것으로 보이고 문서가 거의 없으므로주의해야합니다. 준 생산 시스템에서.
편집 : 내 실수. 위의 코드에는 두 가지 버그가 있습니다. 워블은 문자열 아래에 유니 코드 문자열이어야하며 이미 인코딩 된 문자열이 아니어야합니다. 위의 코드는 문자 사이에 공백이있는 결과를 생성합니다. 올바른 코드는 다음과 같습니다.
convertstring=""
for char in unicode(<my_encoded_string>,'utf-8'):
convertstring = convertstring + '\\' + 'u' + str(ord(char)) + '?'
이 코드는 OpenOffice에서 잘 작동합니다. 여기에 다른 사람을위한 참조로 남겨두고 있습니다 (한 가지 실수는 아래 토론 후에 추가로 수정 됨).
ShankarG : Microsoft의 실제 사양은 Wikipedia의 "16 비트 부호있는 10 진 정수"표현을 사용하지 않습니다. WP 편집기와 달리 MS의 사람들은 음수 유니 코드 코드 포인트가없고 서명되었음을 알기 때문에 좋습니다. 바보가 될 것이다). 그것으로부터 취할 필요가있는 것은'\ u' 다음에 32767까지의 숫자가 필요하다는 것입니다. – geoffspear
설명해 주셔서 감사합니다. 하지만 올바른 번호를 얻으려면 어떻게해야합니까? ord ()의 출력이 올바른 것 같지 않습니다. –
ShankarG
'ord()'는 나를 위해 '1576'을 생성하는 것 같습니다. 당신은 유니 코드 문자열이고 utf-8 바이트가 아닌지 확신합니까? – geoffspear