如何创建类似" \ 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"
但是如何通过功能完成?谢谢你的想法。
答案 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位数字,然后匹配+
>
,我们将其称为~
),并在回调中执行转换。x
处理输入字符串中的所有非重叠匹配。