【问题标题】:Perl Insert Trademark Symbol into MysqlPerl 将商标符号插入 Mysql
【发布时间】:2013-10-27 09:34:47
【问题描述】:

我编写了一个 perl 脚本,它使用 CAM PDF 模块从 pdf 文件中提取 PDF 元数据。然后我使用 DBI 将这些数据插入 MySQL。我遇到了一个包含特殊字符的 PDF 文件。我可以确认 MySQL 模式和数据库表设置为 UTF8。我已将 perl 脚本设置为使用 use utf8; 的 utf8 我也将 DBI 连接设置为使用此 mysql_enable_utf8 => 1

我现在可以保存一些符号(版权、注册),但商标符号被转换为撇号/重音符号。我读到设置$dbh->do('SET NAMES utf8') 将有助于解决这个问题,但在我的场景中,它会在第一次遇到符号后剪切所有文本。

我猜问题是来自 PDF 的文本设置为另一种编码格式,而不是 UTF8。我尝试使用use Encoding 模块对这些字符串进行解码/编码,并将符号转换为文本。当使用 php 将该文本输出到网页时,它会显示为文本而不是符号。

【问题讨论】:

  • 听起来您的数据被渲染为 ISO-8859-1 或 Windows-1252 而不是 UTF-8。
  • use utf8 仅声明您的脚本是用 utf-8 编码的。它不做任何其他事情。如需更多信息,请参阅perldoc 页面utf8perlunicode

标签: mysql perl pdf character-encoding dbi


【解决方案1】:

添加到use utf8 与此处无关...PDF metadata use special PDFDocEncoding(或 UTF-16BE,如果 PDFDocEncoding 不够,但那不是您的情况),其中 商标 是十进制 146 -- 在 CP1252 中 quoteright,就是这样。因为CAM::PDF 不进行任何解码(PDF::API2,顺便说一句)并返回原始字节。你必须自己解码它们。但是,对于简单的元数据提取任务,您可以使用Image::ExifTool,它表示它会自动从 PDFDocEncoding 解码。

【讨论】:

  • 感谢您推荐 Image::ExifTool。这完美地解决了我的编码问题。
猜你喜欢
  • 2012-07-15
  • 1970-01-01
  • 2011-06-06
  • 1970-01-01
  • 2012-11-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-23
相关资源
最近更新 更多