- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我尝试将字符串转换为 utf8。
#!/usr/bin/perl -w
use Encode qw(encode decode is_utf8);
$str = "\320\300\304\310\323\321 \316\320\300\312\313";
Encode::from_to($str, 'windows-1251', 'utf-8');
print "converted:\n$str\n";
在这种情况下,我得到了我需要的:
# ./convert.pl
converted:
РАДИУС ОРАКЛ
但是如果我使用外部变量:
#!/usr/bin/perl -w
use Encode qw(encode decode is_utf8);
$str = $ARGV[0];
Encode::from_to($str, 'windows-1251', 'utf-8');
print "converted:\n$str\n";
没有任何反应。
# ./convert.pl "\320\300\304\310\323\321 \316\320\300\312\313"
converted:
\320\300\304\310\323\321 \316\320\300\312\313
这是第一个例子的转储:
SV = PV(0x1dceb78) at 0x1ded120
REFCNT = 1
FLAGS = (POK,pPOK)
PV = 0x1de7970 "\320\300\304\310\323\321 \316\320\300\312\313"\0
CUR = 12
LEN = 16
第二个:
SV = PV(0x1c1db78) at 0x1c3c110
REFCNT = 1
FLAGS = (POK,pPOK)
PV = 0x1c5e7e0 "\\320\\300\\304\\310\\323\\321 \\316\\320\\300\\312\\313"\0
CUR = 45
LEN = 48
我试过这个方法:
#!/usr/bin/perl -w
use Devel::Peek;
$str = pack 'C*', map oct, $ARGV[0] =~ /\\(\d{3})/g;
print Dump ($str);
# ./convert.pl "\320\300\304\310\323\321 \316\320\300\312\313"
SV = PV(0x1c1db78) at 0x1c3c110
REFCNT = 1
FLAGS = (POK,pPOK)
PV = 0x1c5e7e0 "\320\300\304\310\323\321\316\320\300\312\313"\0
CUR = 11
LEN = 48
但这又不是我所需要的。你能帮我得到第一个脚本中的结果吗?
使用后
($str = shift) =~ s/\\([0-7]+)/chr oct $1/eg
按照 Borodin 的建议,我明白了
SV = PVMG(0x13fa7f0) at 0x134d0f0
REFCNT =
FLAGS = (SMG,POK,pPOK)
IV = 0
NV = 0
PV = 0x1347970 "\320\300\304\310\323\321 \316\320\300\312\313"\0
CUR = 12
LEN = 16
MAGIC = 0x1358290
MG_VIRTUAL = &PL_vtbl_mglob
MG_TYPE = PERL_MAGIC_regex_global(g)
MG_LEN = -1
最佳答案
不清楚你从哪里得到什么输入,或者你想要输出什么,但是你不应该将你的数据编码成 UTF-8 以便在程序中使用,因为你想处理字符 而不是编码字节。您应该只从发送给程序的任何外部编码解码它,然后像那样使用它
听起来输入是 Windows-1251,输出是 UTF-8 (?),我认为反斜杠会分散注意力。文件中没有反斜杠或在键盘上输入了吗?因此,为了清楚起见,将基数更改为十六进制,您的输入字符串是这样的
"\xD0\xC0\xC4\xC8\xD3\xD1\x20\xCE\xD0\xC0\xCA\xCB"
并且您想将它转换为 Perl 字符串,用它做一些事情,然后将它打印到输出中。如果你在 Linux 机器上并且你想从原始输入字节显式解码它,那么你需要写这样的东西
use utf8;
use strict;
use warnings;
use feature 'say';
use open qw/ :std OUT :encoding(UTF-8) /;
use Encode qw/ decode /;
my $str = "\xD0\xC0\xC4\xC8\xD3\xD1\x20\xCE\xD0\xC0\xCA\xCB";
$str = decode('Windows-1251', $str);
say $str;
РАДИУС ОРАКЛ
但这是人为的情况。该字符串实际上来自输入流,因此最好设置流的编码并忘记手动解码。如果您从 STDIN 读取数据,您可以使用 binmode
,就像这样
binmode STDIN, 'encoding(Windows-1251)';
然后来自 STDIN 的文本输入将从 Windows-1251 编码的字节隐式转换为字符串。或者,如果您在自己的句柄上打开文件,则可以将编码放入 open
调用
open my $fh, '<:encoding(Windows-1251)', $file or die $!;
然后你也不需要添加binmode
正如我所说,我假设您的输出是 UTF-8,并且在该行上方的程序中
use open qw/ :std OUT :encoding(UTF-8) /;
将所有输出 文件句柄设置为默认的UTF-8 编码。 :std
还将内置句柄 STDOUT 和 STDERR 设置为 UTF-8。如果这不是您想要的,并且您不知道如何根据需要进行设置,那么请务必询问
关于Perl:从 cp1251 转换为 utf8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33116228/
我想知道是否有一个相同的命令可以像使用旧的 MS-DOS 一样将文件夹复制到当前目录。假设我当前的目录位置是: /var/www/ 我有文件夹和文件: /home/hope/subfolder/doc
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 这个问题似乎不是关于 a specific programming problem, a software
我有一个项目,其中一个目录最初(数百次提交前)是从另一个目录逐字复制的,但是没有使用 svn cp 所以历史上有一个断开连接。现在是否可以在初始复制点连接两个目录,还是为时已晚? 最佳答案 让我猜猜你
我一直在寻找一种方法来 cp 文件并同时将其权限修改为 400...在 public_html 文件夹中进行了一些测试之后... public_html >> ls -lah -rw-r--r--
如果lib/目录下只包含.jar文件,有什么区别 java -cp "lib/*" ... 和 java -cp "lib/*.jar" ... 如果我使用后者,我会遇到关于主类的错误,我不明白为什么
我注意到 javac 和 java 选项的大小写敏感性似乎有所不同。例如: 区分大小写的 javac 命令选项? -cp Yes -sourcepath Yes -d
我以前从来没有遇到过这个问题,当我去运行 Java 程序(在终端中)时,我会简单地说, java className 然后程序就会运行。但是最近当我尝试这个时我得到了错误, could not
我有两个问题: 为什么 javac -cp 不需要 .? $ javac -cp /home/t/programs/java/test/junit-4.11.jar TestCase.java 为什么
根据 Linux 中的管道方法,第一个命令的输出应该被视为第二个命令的输入。所以当我在做 which cp | ls -l,应该当作ls -l $(which cp) 但输出显示的是其他内容。 为什么
有什么区别 cp -R source_path target_path 对比 cp -R source_path/* target_path 我发现第二个 cmd 在我的 amazon linux 系
根据标准: A copy/move constructor for class X is trivial if it is not user-provided and if — class X has
当我对 grep 执行 ls 时,结果正是我所需要的:dll 列表,见下文: $ ls -R | grep "dll$" boost_chrono-vc90-gd-1_47.dll boost_c
出于工作需要,使用aws Java SDK实现“aws s3 cp”命令会很方便。 有现成的类,例如TransferManager,AmazonS3Client有get方法。他们可以轻松地将文件下载到
背景 我有两个图像文件夹...文件夹一是包含数千张彩色图像的主文件夹。文件夹二是一个经过过滤的文件夹,其中包含我一直在整个文件夹一中寻找的内容,但文件夹二中的图像是黑白的。 特别说明 – 文件夹二中的
大家好,我正在使用 GCE,现在我是存储桶的新手。我的另一个桶上有很多照片。我尝试将其复制为 sudo gsutil cp -R dir dir 我花了 30 分钟仍未完成文件复制,所以我尝试了使用
我正在尝试从命令行编译并运行程序。当我们编译它时,我们执行 -cp 并将其链接到我们的 jdbc jar。 javac -cp jdbc.jar *.java 如果我们这样做: java调试器 然后我
我正在编写一个脚本来设置 debian 安装,这个错误让我很沮丧: 问题: cp "$BASHRC" "$HOME"/.bashrc 给出: + sudo -u billy bash cp: cann
#!/bin/bash # Make a txt copy of any html files for value in $1/*.html do if [[ $value == *.
我有一个大文件正在移动。实验室中的正常协议(protocol)是将其复制到某处,然后将其删除。 我决定改成mv。 我的问题是,为什么 mv 比 cp 快这么多? 为了测试它,我生成了一个 2.7 GB
我有一个大文件正在移动。实验室中的正常协议(protocol)是将其复制到某处,然后将其删除。 我决定改成mv。 我的问题是,为什么 mv 比 cp 快这么多? 为了测试它,我生成了一个 2.7 GB
我是一名优秀的程序员,十分优秀!