【问题标题】:perl np++ messes up charsperl np++ 弄乱了字符
【发布时间】:2014-07-20 00:09:19
【问题描述】:

这个字符在原文件中怎么表示:

" – "

在 np++ 的输出控制台中使用 perl 脚本显示为这个?

" ÔÇô "

原始编码是 UTF-8(根据 np++),打开和读取文件我使用这一行:

open(DATA, '<:encoding(utf-8)', "C:\\test.csv") or die "Can't open data";
@lines = <DATA>;

如果我遍历行:

foreach (@lines){
  print $_;
}

字符的表示如上所述。我在 notepad++ 控制台中显示输出,而不是在新文件中。

【问题讨论】:

  • 在脚本顶部尝试use utf8;
  • 嗨。我确实使用使用 utf8;忘记说了。
  • np++ 你的意思是notepad++?在 np++ 中打开文件并检查输入和输出文件的“编码”(在菜单栏中)是否相同。
  • 输入:utf-8 输出:控制台(无编码)
  • 尝试将结果打印到文件中,我认为您的控制台行为不同

标签: perl encoding


【解决方案1】:

在您的 print 声明之前,尝试添加以下内容:

binmode(STDOUT, ":utf8");
foreach (@lines){
  print $_;
}

在 Windows 系统上,

use Encode; 
binmode(STDOUT, 'encoding(cp850)'); 

您系统中的代码页 (850) 编号可能不同,请在 DOS 控制台中写入此命令以获取您的:

C:\>chcp

也就是说,即使您做对了所有事情,它现在也可能会起作用,因为有问题的字符 U+2013 不是两种最常见的控制台编码 cp850cp437 的一部分。它不能在使用这些编码的控制台中显示。

如果是这种情况,最好的办法是通过在提示符处输入 chcp 65001 将控制台的编码切换为 UTF-8。您需要编辑控制台的属性以将字体切换为适当的字体(例如 Lucidia 控制台)。完成后,您可以使用:encoding(UTF-8)

【讨论】:

  • 开头我也有这个说法。
  • 嗨。我得到代码页:850。但是如果我在 binmode(STDOUT, 'encoding(cp850)'; 中使用它,它仍然不起作用。我现在得到 \x{2013}。
  • 尝试在 Windows 控制台中执行(可能是 np++ 的问题)
  • @user3483676,这是因为有问题的字符 U+2013 不是 cp850 的一部分。您的控制台无法显示它。查看更新。
猜你喜欢
  • 2012-03-06
  • 1970-01-01
  • 2014-03-04
  • 1970-01-01
  • 2010-12-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2022-10-07
相关资源
最近更新 更多