このiconv
関数は、国際エンコーディング間の音訳を管理するシステム固有の関数です。iconvlist
OS 機能が使用する名前のベクトルを返すことができる関数があります。str1 (23 文字) を 26 に、またはその逆に変換できるかどうかを確認するために、自分のシステムで 419 のそのようなエンコーディングをすべて実行し、自分のマシンで 2 つのそのようなエンコーディングを見つけましsapply
た。try
私は Mac を使用しているため、OS の状態を開示していないため、これらの特定の値が機能することを保証することはできません。
上記のstrsplit
-result からの出力だけで MWE をまとめることができました。str2
str1<-"Diş Hekimliği Fakültesi"
str3 <- scan(what="")
"D" "i" "s" "̧" " " "H" "e" "k" "i" "m" "l" "i" "g" "̆" "i" " " "F" "a" "k" "u" "̈" "l" "t" "e" "s" "i"
#27:
#Read 26 items
> str3c <- paste0(str3, collapse="")
> nchar(str3c)
[1] 26
> str1
[1] "Diş Hekimliği Fakültesi"
多くのエラー メッセージ (囲まれているために実行が停止しない) の後try()
、次のコードを使用して 2 つのエンコーディングのリストを取得しました。
?iconv
which(sapply( try(utils::head(iconvlist(), n = 419)), function(xc)
try(nchar(iconv(str1, to=xc))))==26)
#--------snipped large number of error messages-------
Error in nchar(iconv(str1, to = xc)) : invalid multibyte string 1
UTF-8-MAC UTF8-MAC
400 402
次に、逆が成功する可能性があると考えて (str1 が 23 文字のオブジェクトとして開始されたため)、次のことを試してみました。
> iconv(str3c,from="UTF-8-MAC", to="UTF-8")
[1] "Diş Hekimliği Fakültesi"
> nchar(iconv(str3c,from="UTF-8-MAC", to="UTF-8"))
[1] 23
Windows iconv の Web ページを見ると、 のリストがあることがわかり {10081, "x-mac-turkish"}, /* Turkish (Mac) */
ます。Windoze を使用している場合は、おそらく試してみることができます。
================
以下の以前の調査(文字値を引き離す方法を知っておくと便利だと思います。)
わかった。上記のものだけでMWEを実際にまとめることができます:
str1<-"Diş Hekimliği Fakültesi"
str3 <- scan(what="")
#1: "D" "i" "s" "̧" " " "H" "e" "k" "i" "m" "l" "i" "g" "̆" "i" " " "F" "a" "k" "u" "̈" "l" "t" "e" "s" "i"
#27:
#Read 26 items
> str3c <- paste0(str3, collapse="")
> nchar(str3c)
[1] 26
> str1
[1] "Diş Hekimliği Fakültesi"
次に、キャラクターのハッキングを行います。
> ?charToRaw
> charToRaw(str3c)
[1] 44 69 73 cc a7 20 48 65 6b 69 6d 6c 69 67 cc 86 69 20 46 61 6b 75 cc 88 6c 74 65
[28] 73 69
> charToRaw(str1)
[1] 44 69 c5 9f 20 48 65 6b 69 6d 6c 69 c4 9f 69 20 46 61 6b c3 bc 6c 74 65 73 69
3 番目の文字を表す 3 つの Raw アイテムを見てください。2 番目の表現では、16 進数の「cc」でバックスペースしてからディセンダーを出力する基本文字が使用されているようです。正規表現でそれらを認識できるかどうかを確認します。
rawToChar( charToRaw(str3c) [3])
#[1] "s"
rawToChar( charToRaw(str3c) [4])
#[1] "\xcc"
rawToChar( charToRaw(str3c) [5])
#[1] "\xa7"
grep("s\\xcc\\xa7", str3c)
#[1] 1 # Success!
そして、これらの単語の分割バージョンで作業していた場合に最終的に得られたものよりもおそらく効率的だと思う gsub があります。
gsub("s\\xcc\\xa7", "\\c5\\9f", str3c)
#[1] "Diş Hekimliği Fakültesi"
また、R が 26 の「文字」があることを示していたエントリには、実際には 29 の生のエントリがあったことに注意してください (23 とされていたエントリには 26 が含まれていました)。cc
3 つ(バックスペース) は実際にはカウントされていなかったと思います。