如何生成所有可能的 unicode 字符?
How to generate all possible unicode characters?
如果我们输入 letters
,我们会得到英文字母表中的所有小写字母。但是,还有更多可能的字符,如 ä
、é
等。还有像 $
或 (
这样的符号。我发现 this table 个 unicode 字符,这正是我所需要的。当然,我不想在一个向量中复制和粘贴数百个可能的 unicode 字符。
到目前为止我已经尝试过:table 给出了(一些)unicode 字符的小数。比如看下面这个小table:
Glyph Decimal Unicode Usage in R
! 33 U+0021 "\U0021"
因此,如果键入 "\U0021"
,我们将得到 !
。此外,paste0("U", format(as.hexmode(33), width= 4, flag="0"))
returns "U0021"
与我需要的非常接近,但添加 \
会导致错误:
paste0("\U", format(as.hexmode(33), width= 4, flag="0"))
Error: '\U' used without hex digits in character string starting ""\U"
我卡住了。而且我担心即使我弄清楚如何使用 as.hexmode()
将数字转换为字符,仍然存在问题,即所有 unicode 字符都没有小数(参见 table,小数以 591 结尾)。
知道如何生成包含 table 链接中列出的所有 unicode 字符的向量吗?
(这个问题从一个现实世界的问题开始,但现在我主要是想知道如何做。)
可能有更简单的方法可以做到这一点,但这里是。 Unicode
软件包包含您需要的一切。
首先我们可以得到一个 unicode 脚本列表和块范围:
library(Unicode)
uranges <- u_scripts()
检查我们得到了什么:
head(uranges, 3)
$Adlam
[1] U+1E900..U+1E943 U+1E944..U+1E94A U+1E94B U+1E950..U+1E959 U+1E95E..U+1E95F
$Ahom
[1] U+11700..U+1171A U+1171D..U+1171F U+11720..U+11721 U+11722..U+11725 U+11726 U+11727..U+1172B U+11730..U+11739 U+1173A..U+1173B U+1173C..U+1173E U+1173F
[11] U+11740..U+11746
$Anatolian_Hieroglyphs
[1] U+14400..U+14646
接下来我们可以将范围转换成它们的序列。
expand_uranges <- lapply(uranges, as.u_char_seq)
要获得所有字符的单个向量,我们可以取消列出它。这并不容易处理,所以最好将它们保存为列表:
all_unicode_chars <- unlist(expand_uranges)
# The Wikipedia page linked states there are 144,697 characters
length(all_unicode_chars)
[1] 144762
所有这些似乎都是如此,页面需要更新。它们存储为整数,以便打印它们(假设支持字形)我们可以这样做,例如,打印日文片假名:
intToUtf8(expand_uranges$Katakana[[1]])
[1] "ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶヷヸヹヺ"
如果我们输入 letters
,我们会得到英文字母表中的所有小写字母。但是,还有更多可能的字符,如 ä
、é
等。还有像 $
或 (
这样的符号。我发现 this table 个 unicode 字符,这正是我所需要的。当然,我不想在一个向量中复制和粘贴数百个可能的 unicode 字符。
到目前为止我已经尝试过:table 给出了(一些)unicode 字符的小数。比如看下面这个小table:
Glyph Decimal Unicode Usage in R
! 33 U+0021 "\U0021"
因此,如果键入 "\U0021"
,我们将得到 !
。此外,paste0("U", format(as.hexmode(33), width= 4, flag="0"))
returns "U0021"
与我需要的非常接近,但添加 \
会导致错误:
paste0("\U", format(as.hexmode(33), width= 4, flag="0"))
Error: '\U' used without hex digits in character string starting ""\U"
我卡住了。而且我担心即使我弄清楚如何使用 as.hexmode()
将数字转换为字符,仍然存在问题,即所有 unicode 字符都没有小数(参见 table,小数以 591 结尾)。
知道如何生成包含 table 链接中列出的所有 unicode 字符的向量吗?
(这个问题从一个现实世界的问题开始,但现在我主要是想知道如何做。)
可能有更简单的方法可以做到这一点,但这里是。 Unicode
软件包包含您需要的一切。
首先我们可以得到一个 unicode 脚本列表和块范围:
library(Unicode)
uranges <- u_scripts()
检查我们得到了什么:
head(uranges, 3)
$Adlam
[1] U+1E900..U+1E943 U+1E944..U+1E94A U+1E94B U+1E950..U+1E959 U+1E95E..U+1E95F
$Ahom
[1] U+11700..U+1171A U+1171D..U+1171F U+11720..U+11721 U+11722..U+11725 U+11726 U+11727..U+1172B U+11730..U+11739 U+1173A..U+1173B U+1173C..U+1173E U+1173F
[11] U+11740..U+11746
$Anatolian_Hieroglyphs
[1] U+14400..U+14646
接下来我们可以将范围转换成它们的序列。
expand_uranges <- lapply(uranges, as.u_char_seq)
要获得所有字符的单个向量,我们可以取消列出它。这并不容易处理,所以最好将它们保存为列表:
all_unicode_chars <- unlist(expand_uranges)
# The Wikipedia page linked states there are 144,697 characters
length(all_unicode_chars)
[1] 144762
所有这些似乎都是如此,页面需要更新。它们存储为整数,以便打印它们(假设支持字形)我们可以这样做,例如,打印日文片假名:
intToUtf8(expand_uranges$Katakana[[1]])
[1] "ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶヷヸヹヺ"