1 min read

unicode escape in R

簡介

最近需要分析中文資料,就遇到了unicode escape的問題。

除了抓下來的資料問題外,就是轉JSON的時候也會跑出來

library(rjson)
toJSON("測試")
toJSON("測試", "R")
> library(rjson)
> toJSON("測試")
[1] "\"\\u6e2c\\u8a66\""
> toJSON("測試", "R")
[1] "\"測試\""
> 

中間的\u6e2c\u8a66就是unicode escape

解法原理

上面的\u6e2c中,\u是header,6e2c是__UTF16BE__編碼的hex code。

了解這點之後,就很容易自己做出解決方法:

  • 利用regular expression(如gregexpr)定位\\u[0-9a-f]{4,4}
  • 利用iconv把後面的兩個byte從__UTF16BE__轉換回__UTF8__

很弱的實作

但是我在R裏面沒有找到原生的hex轉string的函數,最後就自己刻了兩個函數,效能很差。

但是原理知道了,所以之後我有空可能刻個C++的解決方案。