首页 > 解决方案 > PDF 不像 Go 那样使用 utf-8 字符串编码

问题描述

我正在使用 libray ( https://github.com/unidoc/unipdf ) 来处理 PDF 文件。通过使用“SetReason”方法,我尝试设置我的 pdf 文件签名的原因。

func (_aggg *PdfSignature )SetReason (reason string ){_aggg .Reason =_gb .MakeString (reason )};

这导致西里尔文字变得不清楚符号(如图所示)。 不明确的循环符号

原文为:“русский > Request Id = 12, Task Id = 145”

在 PDF 文件的主要内容中使用西里尔符号就可以了。问题出在 'Signs'('Подписи') 部分(如图所示)。

在图书馆有一个提及:(见“注意”)

// MakeString creates an PdfObjectString from a string.
// NOTE: **PDF does not use utf-8 string encoding like Go so `s` will often not be a utf-8 encoded
// string.**
func MakeString(s string) *PdfObjectString { _aaad := PdfObjectString{_gcae: s}; return &_aaad } 

我想让我的 pdf 文件的“原因”成为可读的西里尔符号,那么,有什么解决方案吗?希望,我解释了问题...

标签: gopdfutf-8

解决方案


如果您使用core.MakeEncodedString https://apidocs.unidoc.io/unipdf/latest/github.com/unidoc/unipdf/v3/core/#MakeEncodedString ,它应该可以工作

signature.Reason = core.MakeEncodedString("русский > Request Id = 12, Task Id = 145", true)

func MakeEncodedString(s string, utf16BE bool) *PdfObjectString MakeEncodedString 创建一个带有编码内容的 PdfObjectString,它可以是 UTF-16BE 或 PDFDocEncoding,具体取决于utf16BE分别是 true 还是 false。

这会将原因存储在适合此文本的 UTF-16BE 中。

披露:我是 UniPDF 的原始开发者。


推荐阅读