如何将实际的Unicode转换为\ u0123

时间:2018-11-16 00:08:05

标签: bash text utf-8 sh encode

我想使用转义序列将Unicode文本转换为纯ASCII编码。

输入:Ɏɇ衳输出到... "\u024E\u0247\u8873"

基本上与此相反的。

$ echo -e "\u024E\u0247\u8873"
Ɏɇ衳

我希望编码保留在utf8中,我所做的只是更改表格。

我尝试过:

iconv -f utf8 -t utf8  $file
iconv -f utf8 -t utf16  $file

2 个答案:

答案 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”以获取更多详细信息