【问题标题】:Perl: substitute .* to §Perl:将 .* 替换为 §
【发布时间】:2017-12-01 03:04:17
【问题描述】:

我必须用 Perl (v5.24.1@Win10) 中的 $fn = '1./(4.*z.^2-1)' 等表达式替换多个子字符串:

$fn =~ s/.\//_/g;
$fn =~ s/.\*/§/g;
$fn =~ s/.\^/^/g;

但是 § 不起作用;我在表达式结果中得到一个┬º (1_(4┬ºz^2-1))。我需要这个作为文件夹和文件名,它在 Matlab@Win10 中使用 fn = strrep(fn, '.*', '§') 运行良好。

如何获得 Perl 替换结果中的 §?

【问题讨论】:

  • 您使用什么编码来保存脚本?您使用什么编码进行输出?您用于查看输出的程序使用什么编码?
  • 我正在使用gedit(Win移植;通常用于Linux);从来没有任何编码问题,所以我在这里迷路了;没有发现与偏好相关的内容

标签: perl string-substitution


【解决方案1】:

它对我有用:

#! /usr/bin/perl
use warnings;
use strict;
use feature qw{ say };

use utf8;
use open IO => ':encoding(UTF-8)', ':std';

my $fn = '1./(4.*z.^2-1)';

s/.\//_/g,
s/.\*/§/g,
s/.\^/^/g
    for $fn;

say $fn;

输出:

1_(4§z^2-1)

你可以看到use utf8,它告诉 Perl 源代码是 UTF-8。然后确保将源代码保存为 UTF-8。

use open 设置标准输入和输出的 UTF-8 编码。确保您打印到的终端也配置为使用 UTF-8。

【讨论】:

  • 谢谢;问题似乎是 UTF-8 编码。随着您在 Perl 代码中的添加,Win 终端显示 1_(4┬ºz^2-1) 并且作为 writen 文件夹名称的一部分,我得到 1_(4§z^2-1)。在 Win 终端的属性中,我只看到: Codepage 850 (OME - Multilingual Lateinisch) 但没有选项可以更改。
  • @GünterBachelier:尝试将输出保存到文件并在支持 UTF-8 的编辑器中打开它。请参阅chcp,了解如何更改 MSWin 终端中的代码页。具体尝试chcp 65001,请记住,您需要使用 TrueType 字体才能正确显示所有 unicode 字符。
  • 在 Win 控制台中使用 Aktive Codepage: 65001 我得到了所需的输出 1_(4§z^2-1),而 gedit 和 .pl 文件没有任何其他更改。谢谢!
  • 不幸的是,即使正确的名称显示在带有 output_folder_name = CM-1_(4§z^2-1)-2017-06-27-01 的控制台。奇怪!
  • 您没有提到文件夹名称。你是怎么设置的?见stackoverflow.com/a/5993942/1030675
猜你喜欢
  • 2013-12-31
  • 1970-01-01
  • 2019-01-15
  • 2011-02-15
  • 2013-06-23
  • 2023-03-28
  • 2014-08-27
  • 2010-11-05
  • 2017-11-11
相关资源
最近更新 更多