我想使用转义序列将Unicode文本转换为纯ASCII编码。
输入:Ɏɇ衳
输出到... "\u024E\u0247\u8873"
基本上与此相反的。
$ echo -e "\u024E\u0247\u8873"
Ɏɇ衳
我希望编码保留在utf8
中,我所做的只是更改表格。
iconv -f utf8 -t utf8 $file
iconv -f utf8 -t utf16 $file
答案 0 :(得分:2)
您提到的代码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
返回给定字符的代码点。编辑
如果您要考虑到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;
}
答案 1 :(得分:-1)
如果文件中包含该文件,则可以使用iconv。
iconv -f $input_encoding -t $output_encoding $file
检查“ man iconv”以获取更多详细信息