UTF-8:按字符代码编号创建字符(字符串)

时间:2016-09-16 08:53:43

标签: regex r string encoding utf-8

如何创建类似" \ u0531"的UTF-8字符串?在R,但采取代码" 0531"作为变量?

我有一个错误的字符串(由"标签和#34中的UTF-8代码组成),我想动态变成一个好的字符串(正确的UTF-8字符串)。

badString <- "<U+0531><U+0067>"
goodString <- "Աg" # how can I generate that by a function?

turnBadStringToGoodString<- function (myString){
  newString <- gsub("<U\\+([0-9]{4})>","\\u\\1",myString)
  newString2 <- parse(text = paste0("'", newString, "'"))[[1]]
  return (
    newString2
    )
}

turnBadStringToGoodString ( badString )
# returns an expression. What to do next?

请注意,手动输入

可以达到预期的效果
"\u0531\u0067"

但是如何通过功能完成?谢谢你的想法。

还相关:Converting a \u escaped Unicode string to ASCII

1 个答案:

答案 0 :(得分:1)

我建议使用带有正则表达式的import { Component } from '@angular/core'; import { Http, Response } from '@angular/http'; @Component({ selector: 'app-root', templateUrl: './app.component.html', styleUrls: ['./app.component.css'] }) export class AppComponent { title = 'app works!'; constructor(private http: Http){ let link = 'http://api.giphy.com/v1/gifs/search?api_key=dc6zaTOxFJmzC&q='; let apiLink = link + 'cats'; this.http.request(apiLink).subscribe((res: Response) => { console.log(res.json()); }); } } 来捕获数字并仅返回转换后的Unicode符号:

gsubfn

一点解释:

  • library(gsubfn) badString <- "<U+0531><U+0067>" turnBadStringToGoodString<- function (myString){ return ( gsubfn("<U\\+(\\d{4})>", ~ parse(text = paste0("'", paste0("\\u",x), "'"))[[1]],myString) ) } turnBadStringToGoodString(badString) [1] "Աg" 匹配<U\\+(\\d{4})><U,然后捕获到第1组4位数字,然后匹配+
  • 第1组中的值传递给回调函数(使用>,我们将其称为~),并在回调中执行转换。
  • x处理输入字符串中的所有非重叠匹配。