我写了一个perl脚本,它使用CAM PDF模块从pdf文件中提取PDF元数据。然后,我使用DBI将数据插入MySQL。我遇到了一个包含特殊字符的PDF文件。我可以确认MySQL架构和DB表设置为UTF8。我将perl脚本设置为use utf8;
使用utf8我也有DBI连接设置使用此mysql_enable_utf8 => 1
。
我现在可以保存一些符号(版权,已注册),但商标符号会转换为撇号/重音符号。我读到设置$dbh->do('SET NAMES utf8')
将有助于解决这个问题,但在我的场景中,它会在第一次遇到符号后剪切所有文本。
我猜测问题是来自PDF的文本是以另一种编码格式而不是UTF8设置的。我尝试使用use Encoding
模块对这些字符串进行解码/编码,并将符号转换为文本。当该文本使用php输出到网页时,它显示为文本而不是符号。
答案 0 :(得分:2)
要添加到use utf8
此处不相关... PDF metadata use special PDFDocEncoding(或UTF-16BE,如果PDFDocEncoding不够,但情况不是这样),商标是十进制146 - 在CP1252中是 quoteright ,这就是你得到的。因为CAM::PDF不进行任何解码(既不是PDF::API2,也不是btw)并返回原始字节。你必须自己解码它们。但是,对于元数据提取的简单任务,您可以使用Image::ExifTool,它表示它会自动从PDFDocEncoding解码。