Unicode 文字で 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
は、処理中の文字のコード ポイントが含まれています (たとえば、'A' の場合は 65、'a' の場合は 97、アラビア語の光沢 'Ø' の場合は 1588)。cur
最終出力 (AFAIU) に送信される文字で満たされているリストです。その行の前では、すべてが (明らかに) 正常に機能していましたが、この行では、 の値n
が操作され、拡張 ASCII 範囲に縮小されたようです!
これにより、ASCII 以外の Unicode 文字の値が失われます。このステートメントがどのように役立つか、またはなぜ必要なのか理解できません!
だから私の質問は、なぜn
ここで の値が操作されているのですか? この問題を修正するにはどうすればよいですか?
編集:
私のコード スニペットに関するコメントに応えて、このエラーの原因となる例を次に示します。
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)])])
ではPDFTextObject._textOut
、_formatText
が呼び出され、フォントが として識別され_dynamicFont
、それに応じて が呼び出されfont.splitString
、上記のエラーが発生します。