如何将实际的 Unicode 转换为 \u0123
How to convert actual Unicode to \u0123
我想使用转义序列将 Unicode 文本转换为纯 ASCII 编码。
输入:Ɏɇ衳
输出到..."\u024E\u0247\u8873"
基本上与此相反。
$ echo -e "\u024E\u0247\u8873"
Ɏɇ衳
我希望编码保持 utf8
,我所做的只是改变形式。
我试过:
iconv -f utf8 -t utf8 $file
iconv -f utf8 -t utf16 $file
如果你在文件中有它,你可以使用 iconv。
iconv -f $input_encoding -t $output_encoding $file
查看"man iconv"了解更多详情
您提到的代码 024E, 0247, ..
称为 Unicode 代码点,独立于 UTF-8 或 UTF-16。
如果 perl
是您的选择,您可以通过以下方式检索代码:
perl -C -ne 'map {printf "\u%04X", ord} (/./g)' <<< "Ɏɇ衳"; echo
输出:
\u024E\u0247\u8873
说明
上面的 perl 代码大部分等同于:
#!/usr/bin/perl
use utf8;
$str = "Ɏɇ衳";
foreach $chr ($str =~ /./g) {
printf "\u%04X", ord($chr);
}
print "\n";
use utf8
指定字符串以 UTF-8 编码(只是因为字符串嵌入在脚本中)。
($str =~ /./g)
将字符串分解为字符数组。
foreach
遍历字符数组。
ord
returns 给定字符的 代码点 。
编辑
如果您想自动缩放考虑到非 BMP 字符的位数,请尝试:
#!/usr/bin/perl
use utf8;
$str = "Ɏɇ衳";
foreach $chr ($str =~ /./g) {
$n = ord($chr);
$d = $n > 0xffff ? 8 : 4;
printf "\u%0${d}X", $n;
}
我想使用转义序列将 Unicode 文本转换为纯 ASCII 编码。
输入:Ɏɇ衳
输出到..."\u024E\u0247\u8873"
基本上与此相反。
$ echo -e "\u024E\u0247\u8873"
Ɏɇ衳
我希望编码保持 utf8
,我所做的只是改变形式。
我试过:
iconv -f utf8 -t utf8 $file
iconv -f utf8 -t utf16 $file
如果你在文件中有它,你可以使用 iconv。
iconv -f $input_encoding -t $output_encoding $file
查看"man iconv"了解更多详情
您提到的代码 024E, 0247, ..
称为 Unicode 代码点,独立于 UTF-8 或 UTF-16。
如果 perl
是您的选择,您可以通过以下方式检索代码:
perl -C -ne 'map {printf "\u%04X", ord} (/./g)' <<< "Ɏɇ衳"; echo
输出:
\u024E\u0247\u8873
说明
上面的 perl 代码大部分等同于:
#!/usr/bin/perl
use utf8;
$str = "Ɏɇ衳";
foreach $chr ($str =~ /./g) {
printf "\u%04X", ord($chr);
}
print "\n";
use utf8
指定字符串以 UTF-8 编码(只是因为字符串嵌入在脚本中)。($str =~ /./g)
将字符串分解为字符数组。foreach
遍历字符数组。ord
returns 给定字符的 代码点 。
编辑
如果您想自动缩放考虑到非 BMP 字符的位数,请尝试:
#!/usr/bin/perl
use utf8;
$str = "Ɏɇ衳";
foreach $chr ($str =~ /./g) {
$n = ord($chr);
$d = $n > 0xffff ? 8 : 4;
printf "\u%0${d}X", $n;
}