【问题标题】:exchanging Unicode char ruins char before this unicode char在此 unicode char 之前交换 Unicode char 会破坏 char
【发布时间】:2013-09-03 05:42:09
【问题描述】:

我有一个包含 unicode 字符的大列表,我想用以下代码与一些 ASCII 字符交换(此代码做了更多的事情):

while ($Zeile=<STDIN>)
{
@Zeile=split('\t',$Zeile);
$i=0;
foreach(@Zeile)
    {
    if ($i>1) 
        {
        $entry=$_;
        $entry=~s/\(Details\)/ /;
        $entry=~s/\x{00BC}/.25/;
        $entry=~s/\x{00BD}/.5/;
        $entry=~s/\x{00BE}/.75/; 
        print($entry);
        }
    $i++;
    }
}

但在结果中会插入一个字符,它不是 unicode 字符。例如“7½”更改为“7�.5”(复制和粘贴)

【问题讨论】:

  • perlunicode 页面上的第一个警告是 "为了保持向后兼容性,Perl 不会打开完整的内部 Unicode 支持,除非指定了编译指示使用功能 'unicode_strings'。(这如果您使用 use 5.012 或更高版本,则会自动选择。)如果不这样做可能会引发意外的意外。"您是否启用了这些 pragma 中的任何一个?
  • 插入 [code] 使用功能 'unicode_strings';在第一行使用 utf8[/code] 不会改变任何东西 :( [code]use 5.012;[/code] 会产生错误

标签: regex perl unicode


【解决方案1】:

您可能从未指定 STDIN 是一个 utf-8 流。类似的东西

binmode STDIN, ":utf8";

可以解决这个问题。

【讨论】:

    猜你喜欢
    • 2012-06-17
    • 2014-02-28
    • 2021-12-26
    • 1970-01-01
    • 2014-02-04
    • 2021-09-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多