首页 > 解决方案 > 将 UTF-8 十六进制转换为 Unicode 十六进制

问题描述

我有诸如“flamenguistas es\xc3a3o paulinos”之类的字符串,其中包含以这种方式“\xc3a3”的UTF-8代码。我如何把它变成字母“ã”?

我遇到了麻烦,因为大多数用于取消转义的函数都期望代码是 Unicode,而我无法找到将 UTF-8 十六进制转换为 Unicode 十六进制的正确方法。

除了编写从表中读取的函数并进行转换之外,是否有一种简单的方法可以将 UTF-8 十六进制转换为 Unicode 十六进制?

PS当我说“Unicode hex”/“UTF-8 hex”时,我的意思是在这里:https ://en.wikipedia.org/wiki/%C3%87#Computer

标签: rstringunicodeutf-8

解决方案


看起来 R 支持 PCRE 正则表达式。您可以移植以下替换。

hex 函数接受一串十六进制数字并将其转换为数字。chr 函数接受一个数字并将其转换为字符。点运算符是字符串连接。整个结果由 UTF-8 编码的八位字节组成。

#!/usr/bin/env perl
$_ = <<'';
flamenguistas e s\xc3a3o paulinos

s|
    \\x             # literal \x
    (               # capture into $1
        [0-9a-f]    # hex digits
        {2}         # exactly two times
    )
    (               # capture into $2
        [0-9a-f]
        {2}
    )
|
    chr(hex($1)) . chr(hex($2))
|egmsx;

print; # flamenguistas e são paulinos

推荐阅读