【问题标题】:Upper casing of accented characters in Perl - Still confusedPerl中重音字符的大写 - 仍然很困惑
【发布时间】:2014-10-09 11:39:43
【问题描述】:

我的 Perl 脚本中有一个变量,它保存字符串的第一个字母,其中该字符串以 utf-8 编码。我在从文件读取的过程中分配了这个变量。我试图将这个变量指向的字母大写。但是,以下似乎没有效果:

# $first_letter is already assigned to "á". Now we apply uc to it
$first_letter = uc $first_letter;

但是,我在我的脚本中进行了以下测试

if ( $first_letter eq "á" ) {
    my $first_letter1 = "á";
    printf(
        "Upper case first_letter: %s Upper case first_letter1: %s \n",
        encode_entities( uc $first_letter ),
        encode_entities( uc $first_letter1 )
    );
}

然后打印出来:

Upper case first_letter: á Upper case first_letter1: Á 

所以我们可以看到,当我将变量显式分配给“á”时,将 uc 应用于它是有效的,但是我通过读取文件分配的变量有些不同(即使 $first_letter eq “á”)

如果我确保它们彼此相等,如何将 uc 应用于 $first_letter 和 $first_letter1 产生不同的值?

【问题讨论】:

  • 你的脚本是use utf8吗?您是否尝试过将$first_letter 直接与$first_letter1 进行比较?
  • 我怀疑您的示例并未准确显示程序中发生的情况
  • 当我比较 $first_letter 和 $first_letter1 时,它们在将 uc 应用于它们之前是 eq,但在将 uc 应用于它们之后它们不再是 eq。是的,我的脚本确实使用 utf8。据我所知,我准确地代表了这种情况。
  • 查看$first_letter 实际包含的内容可能会有所帮助。考虑显示use Devel::Peek; print Dump $first_letter, Dump $first_letter1; 生成的附加输出

标签: perl utf-8 uppercase


【解决方案1】:

为我工作。我将以下内容保存为 UTF-8:

#!/usr/bin/perl
use warnings;
use strict;

use utf8;
use open 'IO', ':utf8', ':std';

my $first_letter = 'á';
if ($first_letter eq 'á') {
    my $first_letter1 = 'á';
    printf "Upper case first_letter: %s Upper case first_letter1: %s\n", 
        uc $first_letter,
        uc $first_letter1;

}

在 UTF-8 终端中输出:

Upper case first_letter: Á Upper case first_letter1: Á

【讨论】:

  • 是的,但您明确指定了 $first_letter 和 $first_letter1 的值。我正在从文件中读取 $first_letter。我怀疑这就是问题所在,但这就是为什么我进行 eq 测试以确保我从文件中读取的内容真的是 á
  • @egilchri:你是如何打开文件的?你指定编码了吗?
  • 我刚刚检查过,这就是我打开我的 $inh, '<:encoding croak not open for input:>
  • 这可能是相关的。在调试器的上下文中, uc 确实有效果。我将 uc 应用于 $first_letter,然后我可以打印结果。但是,我无法在我的脚本中获得同样的效果。那么我的调试器环境和脚本环境有什么不同呢?
【解决方案2】:

这是我自己的问题的答案。当我添加该行时,“uc”运算符开始按需要工作:

使用 5.014_001;

在执行所有这些操作的 .pm 文件的顶部附近。我不太明白这一点,因为我一直在使用 Perl 5.16 版执行脚本。但是关于“use”这一行的某些东西改变了“uc”的行为。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-21
    • 1970-01-01
    • 1970-01-01
    • 2015-08-04
    • 1970-01-01
    相关资源
    最近更新 更多