[R]文字からCIDを得る
ここからファイルaj17-kanji.txtをダウンロードしてカレントディレクトリに置き、以下のコマンドを実行する。
> library(tidyverse)
> tbl <- read_delim("aj17-kanji.txt", delim = "\t", comment = "#", col_names = FALSE, progress = FALSE, show_col_types = FALSE)
> cid0 <- tbl[[1]]
> ucd0 <- tbl[[19]]
> idx <- which(nchar(ucd0) == 6)
> cid <- cid0[idx]
> ucd <- ucd0[idx]
> h1 <- as.integer(as.hexmode(substr(ucd, 3, 4)))
> h2 <- as.integer(as.hexmode(substr(ucd, 5, 6)))
> mx <- matrix(c(h1, h2), ncol = 2)
> s <- character(nrow(mx))
> for (i in 1:nrow(mx)) {
+ s[i] <- iconv(rawToChar(as.raw(mx[i, ])), from = "unicodeFFFE")
+ }
上記は処理を簡単にするため、Unicodeが16進数表記で「U+」を除く4桁の文字のみ取り出している。文字を指定して、CIDを取り出してみる。最後の例のとおり、該当する文字がない場合は数値のNULLが返る。
> idx <- which(s == "江") # CIDの2000が示す文字は「江」
> print(cid[idx])
[1] 2000
> idx <- which(s == "輪") # CIDの4000が示す文字は「輪」
> print(cid[idx])
[1] 4000
> idx <- which(s == "𩸽") # サロゲートペアの文字は本整理では対象外
> print(cid[idx])
numeric(0)
« [R]CIDから文字を得る | トップページ | [R]tibbleで特定の列の集計を行う »
「R(文字と文字列)」カテゴリの記事
- [R]同じ文字列を繰り返した文字列を作成する(2026.02.02)
- [R]文字列が数値に変換できるかどうか判定する(2025.12.31)
- [R]文字列の長さを得る(2025.12.30)
- [R]空白を追加した指定の長さの文字列を得る(2025.12.26)
- [R]文字列型ベクトルの要素を連結して文字列を作る(2025.12.17)

コメント