【问题标题】:setting BOM to Unicode U code UTF8 perl将 BOM 设置为 Unicode U 代码 UTF8 perl
【发布时间】:2016-12-29 10:40:47
【问题描述】:

这个问题与之前发布的其他问题相似。但是尝试所有组合都不起作用。

我需要以 Unicode Utf8 读取我的 excel 文件,我正在尝试设置我的 bom:

my $csv = Text::CSV->new ({binary=>1, eol =>$/}) or die "cannot use CSV: ".Text::CSV->error_diag (); open my $csvFile, ">:encoding(UTF-8)", "teht.csv" or die "teht.csv: $!"; print($csvFile "\x{FEBBBF}");

但是这会出错并说“0xFEBBBF 不是 Unicode...”

我找到的所有信息都表明 utf8 的代码应该是 print($csvFile "\N{U+FEBBBF}")... "\xFE\xBB\xBF" 或类似名称。

Is it possible to force Excel recognize UTF-8 CSV files automatically? 是一位多次提到这一点的消息来源。

https://stackoverflow.com/a/22711105/6557829 是另一个来源。

到目前为止,我实际上已经能够让 UTF-16 与相同的打印语句一起工作:print($csvFile "\N{U+FEFF}"); 但是这比我打算使用的空间要大。 提前感谢您能给我的任何帮助。

【问题讨论】:

  • BOM 是 U+FEFF,而不是 U+FEBBBF。
  • @ikegami U+FEFF 是 utf16 的代码,而不是 utf8 的代码
  • U+FEFF 表示“Unicode Code Point FEFF”,与UTF-8或UTF-16无关。

标签: perl csv unicode utf-8 hex


【解决方案1】:

BOM 是 U+FEFF,而不是 U+FEBBBF。替换

"\x{FEBBBF}"

使用以下任何一种:

chr(0xFEFF)
"\x{FEFF}"
"\N{U+FEFF}"
"\N{BOM}"

这将创建一个包含单个字符 (FEFF) 的字符串,print 将根据请求使用 UTF-8 对其进行编码 (EF BB BF)。

【讨论】:

  • 这应该用于 utf-16 编码,但我正在寻找 utf8 我是说当我执行您推荐的前两个选项中的任何一个时它是如何工作的,但是我的意思是不使用 8 位16
  • 你试过了吗?你会看到你错了。请参阅添加的段落。
猜你喜欢
  • 2023-04-02
  • 2017-02-12
  • 2014-02-12
  • 2017-08-03
  • 2018-11-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-12-07
相关资源
最近更新 更多