统一码
该 统一码 模块提供了管理Unicode字符和字符串的基本功能。 它包括验证、类别确定、规范化、大小写转换和字素分割,从而实现有效的Unicode数据处理。
# *`统一码`*-模式_
该 统一码 模块提供了管理Unicode字符和字符串的基本功能。 它包括验证、类别确定、规范化、大小写转换和字素分割,从而实现有效的Unicode数据处理。
# *`Unicode。julia_chartransform`*-函数
Unicode.julia_chartransform(c::Union{Char,Integer})
映射Unicode字符(查尔)或codepoint(整数) c 到相应的"等价"字符或codepoint,分别根据Julia解析器内使用的自定义等价(除了NFC规范化之外)。
例如, 'µ' (U+00b5微)被视为等同于 'μ' (U+03BC mu)由Julia的解析器,所以 julia_chartransform 执行此转换,同时保持其他字符不变:
julia> Unicode.julia_chartransform('µ')
'μ': Unicode U+03BC (category Ll: Letter, lowercase)
julia> Unicode.julia_chartransform('x')
'x': ASCII/Unicode U+0078 (category Ll: Letter, lowercase)
julia_chartransform 主要用于传递给 Unicode。正常化函数以模仿Julia解析器使用的规范化:
julia> s = "µö"
"µö"
julia> s2 = Unicode.normalize(s, compose=true, stable=true, chartransform=Unicode.julia_chartransform)
"μö"
julia> collect(s2)
2-element Vector{Char}:
'μ': Unicode U+03BC (category Ll: Letter, lowercase)
'ö': Unicode U+00F6 (category Ll: Letter, lowercase)
julia> s2 == string(Meta.parse(s))
true
|
兼容性
Julia1.8这个函数是在Julia1.8中引入的。 |
# *`Unicode。is分配`*-函数
Unicode.isassigned(c) -> Bool
回来吧 真的 如果给定的字符或整数是指定的Unicode代码点。
*例子*
julia> Unicode.isassigned(101)
true
julia> Unicode.isassigned('\x01')
true
# *`Unicode。isequal_normalized`*-函数
isequal_normalized(s1::AbstractString, s2::AbstractString; casefold=false, stripmark=false, chartransform=identity)
返回是否 中一 和 中二 是等效的Unicode字符串。 如果 casefold=真,忽略大小写(执行Unicode大小写折叠);如果 条纹标记=真,条带变音符号等组合字符。
与 Unicode。正常化,也可以通过 [医]字符转换 关键字(映射 整数 codepoints to codepoints)来执行自定义规范化,例如 Unicode。julia_chartransform.
|
兼容性
朱莉娅1.8 |
*例子*
例如,字符串 "诺埃尔" 可以在Unicode中以两种等效的方式构造,具体取决于是否 "ë" 由单个代码点U+00EB或ASCII字符形成 'e' 接着是U+0308组合-diaeresis字符。
julia> s1 = "noël"
"noël"
julia> s2 = "noël"
"noël"
julia> s1 == s2
false
julia> isequal_normalized(s1, s2)
true
julia> isequal_normalized(s1, "noel", stripmark=true)
true
julia> isequal_normalized(s1, "NOËL", casefold=true)
true
# *`Unicode。正常化`*-函数
Unicode.normalize(s::AbstractString; keywords...)
Unicode.normalize(s::AbstractString, normalform::Symbol)
规范化字符串 s. 默认情况下,规范组合(撰写=真)是在不确保Unicode版本控制稳定性的情况下执行的(compat=错误),它产生尽可能短的等效字符串,但可能会引入早期Unicode版本中不存在的组合字符。
或者,可以指定Unicode标准的四种"正常形式"之一: 正常形式 可以是 :NFC, :NFD, :NFKC,或 :NFKD. 正常形式C(规范组合)和D(规范分解)将同一抽象字符串的不同视觉上相同的表示形式转换为单个规范形式,形式C更加紧凑。 普通形式KC和KD还规范了"兼容性等价物":它们将抽象相似但视觉上不同的字符转换为单个规范选择(例如,它们将连字扩展为单个字符),形式KC更加紧凑。
或者,可以通过调用来获得更精细的控制和额外的转换 Unicode。normalize(s;关键字。..),其中任意数量的下列布尔关键字选项(都默认为 错误 除了 作曲)被指定:
* 撰写=错误:不进行规范构图
* 分解=真:做规范分解而不是规范组合(撰写=真 如果存在则被忽略)
* compat=真:兼容性等价物是规范化的
* casefold=真:执行Unicode大小写折叠,例如进行不区分大小写的字符串比较
* newline2lf=真, newline2ls=true,或 newline2ps=真:将各种换行符(LF,CRLF,CR,NEL)分别转换为换行符(LF),行分隔符(LS)或段落分隔符(PS)字符
* 条纹标记=真:条状变音符号(例如重音符号)
* stripignore=真:删除Unicode的"默认可忽略"字符(例如软连字符或从左到右标记)
* stripcc=真:条带控制字符;水平制表符和表单提要转换为空格;换行符也转换为空格,除非指定了换行符转换标志
* rejectna=真:如果找到未分配的代码点,则抛出错误
* 稳定=真:强制Unicode版本控制稳定性(从不引入早期Unicode版本中缺少的字符)
您还可以使用 [医]字符转换 关键字(默认为 身份认同)传递任意_function_映射 整数 代码点到代码点,它在 s 处理,以便执行任意的附加归一化。 例如,通过通 chartransform=Unicode。julia_chartransform,您可以应用Julia在解析标识符时执行的一些特定于Julia的字符规范化(除了NFC规范化之外: 组成=真,稳定=真).
例如,NFKC对应于选项 compose=true,compat=true,stable=true.
*例子*
julia> "é" == Unicode.normalize("é") #LHS: Unicode U+00e9, RHS: U+0065 & U+0301
true
julia> "μ" == Unicode.normalize("µ", compat=true) #LHS: Unicode U+03bc, RHS: Unicode U+00b5
true
julia> Unicode.normalize("JuLiA", casefold=true)
"julia"
julia> Unicode.normalize("JúLiA", stripmark=true)
"JuLiA"
|
兼容性
朱莉娅1.8 |
# *`Unicode。图形,图形`*-函数
graphemes(s::AbstractString) -> GraphemeIterator
返回迭代器的子字符串 s 它对应于字符串中的扩展图形,如Unicode UAX#29所定义. (粗略地说,这些是用户认为的单个字符,即使它们可能包含多个codepoint;例如,与重音符号组合的字母是单个字素。)
graphemes(s::AbstractString, m:n) -> SubString
松散地说,这对应于 m:n-字符串中用户感知的"字符"。 例如:
julia> s = graphemes("exposé", 3:6)
"posé"
julia> collect(s)
5-element Vector{Char}:
'p': ASCII/Unicode U+0070 (category Ll: Letter, lowercase)
'o': ASCII/Unicode U+006F (category Ll: Letter, lowercase)
's': ASCII/Unicode U+0073 (category Ll: Letter, lowercase)
'e': ASCII/Unicode U+0065 (category Ll: Letter, lowercase)
'́': Unicode U+0301 (category Mn: Mark, nonspacing)
这包括第3到第7个代码点(查尔s)在 "展览",因为字素 "é" 实际上是_two_Unicode代码点(an 'e' 接着是一个急性重音组合字符U+0301).
因为查找字素边界需要对字符串内容进行迭代, 图形(s,m:n) 函数要求在子字符串结束之前与字符串的长度(代码点的数量)成比例的时间。
|
兼容性
朱莉娅1.9 |