使用 android pdf 编写器库对变音符号进行编码

Encoding of umlauts with the android pdf writer lib

我正在使用 Android PDF Writer,但我仍然感到困惑。我的 PDF 渲染器必须用元音符号('ß'、'Ä'、'Ü')书写单词,但它们在 pdf 中显示不正确。

我认为问题出在字符串 class 的方法 getBytes(String encoding) 上。

PDFWriter pdfWriter = new PDFWriter(PaperSize.A4_WIDTH, PaperSize.A4_HEIGHT);
pdfWriter.setFont(StandardFonts.SUBTYPE, StandardFonts.SANS_SERIF, StandardFonts.MAC_ROMAN_ENCODING);
// only write some strings into the pdfwriter
parseData(pdfWriter);
outputToFile(filename, pdfWriter.asString(), "UTF-8");

当我检查 pdfWriter.asString() 时,变音符号存在。

private void outputToFile(String fileName, String pdfContent, String encoding) {
    File newFile = new File(fileName);
    Log.v(Constants.LOG_TAG, newFile.getAbsolutePath());
    try {
        newFile.createNewFile();
        try {
            FileOutputStream pdfFile = new FileOutputStream(newFile);
            pdfFile.write(pdfContent.getBytes("UTF8"));
            pdfFile.close();
        } catch(FileNotFoundException e) {
            //
        }
    } catch(IOException e) {
        //
    }
}

也许 getBytes() 方法有问题?

答案就在眼前:您的 PDF 不使用 UTF-8,因此 PDF 查看器会尝试将您的 UTF-8 编码文件解码为 MacRoman。

为了快速修复,您可以在一侧使用 StandardEncodings.WIN_ANSI_ENCODING,在另一侧使用 "WINDOWS-1252""ISO-8859-1"