유니 코드 문자와 함께 ReportLab을 사용하려고하는데 작동하지 않습니다.ReportLab의 유니 코드 처리
class TTFont:
# ...
def splitString(self, text, doc, encoding='utf-8'):
# ...
cur.append(n & 0xFF) # <-- here is the problem!
# ...
(이 코드는 ReportLab의 저장소에서 찾을 수있는 파일 pdfbase/ttfonts.py에, 문제의 코드 라인 1059에 있습니다.)
: 나는 다음과 같은 라인에 도달 때까지 나는 코드를 통해 추적 시도 n
의 값이 왜 조작되고 있습니까?! 위 라인에
는 n
는 문자의 코드 포인트 (예를 들어, 65 'A'에 대한, 97 'A'에 대한, 또는 1,588 아랍어 윤기를 들어 'ش') 처리중인 포함한다. cur
은 최종 출력 (AFAIU)으로 보낼 문자로 채워지는 목록입니다. 그 라인 이전에, 모든 것이 (명백하게) 잘 동작했지만,이 라인에서 n
의 값이 조작되어 분명히 확장 된 ASCII 범위로 축소되었습니다!
이로 인해 ASCII가 아닌 유니 코드 문자의 값이 손실됩니다. 나는이 진술이 어떻게 유용하며 왜 필요한지 이해할 수 없다!
그럼 내 질문에 n
의 값이 조작되고 왜이 문제를 해결해야합니까?
편집 : PDFTextObject._textOut
에서
my_doctemplate.build([Paragraph(bulletText = None, encoding = 'utf8',
caseSensitive = 1, debug = 0,
text = '\xd8\xa3\xd8\xa8\xd8\xb1\xd8\xa7\xd8\xac',
frags = [ParaFrag(fontName = 'DejaVuSansMono-BoldOblique',
text = '\xd8\xa3\xd8\xa8\xd8\xb1\xd8\xa7\xd8\xac',
sub = 0, rise = 0, greek = 0, link = None, italic = 0, strike = 0,
fontSize = 12.0, textColor = Color(0,0,0), super = 0, underline = 0,
bold = 0)])])
, _formatText
를 호출, _dynamicFont
로 글꼴을 식별 : 내 코드에 관한 의견에 대한 응답으로
, 여기에이 오류가 발생하는 예이다 위의 오류를 일으키는 font.splitString
을 호출합니다.
ReportLab은 실제로 유니 코드 텍스트를 지원합니다. 예상치 못한 결과를 제공하는 자체 포함 된 코드 스 니펫을 게시하여 문제의 원인을 파악하십시오. (당신이 가리키는 코드는 저에게 좋은 포스트 스크립트 자료와 함께 낮은 충실도의 스트림으로 텍스트의 ASCII 표현을 생성하는 것과 관련된 것으로 보입니다). –
0xFF에서 0xFFFF로 변경하면 어떻게됩니까? – unutbu