【问题标题】:How to convert an xlsx file from utf-8 to windows-1252如何将 xlsx 文件从 utf-8 转换为 windows-1252
【发布时间】:2020-01-27 10:12:58
【问题描述】:

我正在编写 PERL 脚本,该脚本从 .XLSX Excel 文件中读取数据并将数据插入 Oracle 数据库。数据库有 Windows-1252 编码,excel 文件有 UTF-8 编码(我知道这是 xlsx 文件的标准),特殊字符如 ö,ü,ű,ő 显示为??。转换该 .xlsx 文件编码的正确方法是什么?在将读取的字符串插入数据库之前,我尝试将读取的字符串转换为 windows-1252,并且尝试将整个 Excel 文件转换为 win-1252,但它们都不起作用。

感谢大家阅读并尝试帮助解决我的问题。 问候, 克里斯

【问题讨论】:

  • 显示您尝试过的内容?特别是在将读取的字符串插入数据库之前将其转换为windows-1252方法。
  • 您可以使用Encode::to_from($str, 'UTF-8', 'cp1252'),将UTF-8 编码的$str 就地转换为Windows-1252,参见the docs
  • 您使用哪个 perl 模块来访问 Oracle-DB?

标签: perl encoding utf-8 xlsx windows-1252


【解决方案1】:

数据库采用 Windows-1252 编码

长期的解决方案是解决这个问题,使数据库编码为 UTF8。

与此同时,您可以使用 XML::LibXML 解析您的 XML 字符串,然后将其序列化为另一种编码,如下所示:

use XML::LibXML;

my $doc = XML::LibXML->load_xml(string => $xml);
$doc->setEncoding('ascii');
my $ascii_xml = $doc->toString();

然后,XML 中的任何非 ASCII 字符都将转换为数字字符实体而不会丢失数据,例如:<title>Café life</title> 将变为 <title>Café life</title>

如果您不能将 UTF-8 XML 放入数据库,那么我建议使用 windows-1252 代替 ASCII 并没有特别的优势,并且使用 ASCII 消除了许多潜在的“脚枪”。

【讨论】:

    猜你喜欢
    • 2013-10-10
    • 1970-01-01
    • 1970-01-01
    • 2021-04-09
    • 2014-05-06
    • 1970-01-01
    • 1970-01-01
    • 2013-09-10
    • 2019-03-12
    相关资源
    最近更新 更多