man*_*nro 3 locale r diacritics transliteration iconv
我试图使用iconvR 中的函数来实现德语单词的正确音译(例如,M\xc3\xb6bel \xe2\x86\x92 Moebel)。
我编写了以下代码(尝试使用英语/德语语言环境):
\niconv("M\xc3\xb6bel", "latin1", "ASCII//TRANSLIT")\n[1] "Mobel"\n\niconv("M\xc3\xb6bel", "UTF-8", "ASCII//TRANSLIT")\n[1] NA\n\niconv("M\xc3\xb6bel", "UTF-8", "ASCII//TRANSLIT", sub ="")\n[1] "Mbel"\n\niconv("M\xc3\xb6bel", "Windows-1252", "ASCII//TRANSLIT")\n[1] "Mobel"\nRun Code Online (Sandbox Code Playgroud)\n然而,这并不能正常工作。这是我的一些测试的输出:
\n#cat + library(ds4psy)\niconv(cat ("M", Umlaut["o"],"bel", sep = ""), "latin1", "ASCII//TRANSLIT")\nM\xc3\xb6belcharacter(0)\nRun Code Online (Sandbox Code Playgroud)\n\n#paste/paste0 + library(ds4psy)\n> iconv(paste ("M", Umlaut["o"],"bel", sep = ""), "latin1", "ASCII//TRANSLIT")\n[1] "MA?bel"\nRun Code Online (Sandbox Code Playgroud)\n为了完整起见,我还尝试了以下stri_trans_general函数stringi:
stri_trans_general("M\xc3\xb6bel", "latin-ascii")\n[1] "Mobel"\nRun Code Online (Sandbox Code Playgroud)\n但是,正如您所看到的,这也不起作用。
\n我不明白的是,为什么该函数在PHPiconv中显然可以正常工作,但在 R 中却无法正常工作:
<?php\n //some German\n $utf8_sentence = \'Wei\xc3\x9f, Goldmann, G\xc3\xb6bel, Weiss, G\xc3\xb6the, Goethe und G\xc3\xb6tz\';\n setlocale(LC_ALL, \'de_DE\');\n \n $trans_sentence = iconv(\'UTF-8\', \'ASCII//TRANSLIT\', $utf8_sentence);\n \n //gives [Weiss, Goldmann, Goebel, Weiss, Goethe, Goethe und Goetz]\n echo $trans_sentence . PHP_EOL;\n?>\nRun Code Online (Sandbox Code Playgroud)\niconv为什么我会看到R 版本与 PHP 版本在行为上存在差异?我的 R 代码做错了什么?
如果您没有必要使用iconv,还有另一种方法可以实现您的目标。
您可以定义一组要音译的德语字符及其一组替换字符,并将这些字符对用作 的输入str_replace_all:
数据:
\ngg <- c("G\xc3\xb6the", "ger\xc3\xa4dert", "H\xc3\xbcrde", "wei\xc3\x9f")\nRun Code Online (Sandbox Code Playgroud)\n首先,定义你的集合:
\nset <- setNames(c("oe", "ae", "ue", "ss"),\n c("\xc3\xb6", "\xc3\xa4", "\xc3\xbc", "\xc3\x9f"))\nRun Code Online (Sandbox Code Playgroud)\n然后替换:
\nlibrary(stringr)\nstr_replace_all(gg, set)\n[1] "Goethe" "geraedert" "Huerde" "weiss" \nRun Code Online (Sandbox Code Playgroud)\n
| 归档时间: |
|
| 查看次数: |
244 次 |
| 最近记录: |