Unicode
Модуль Unicode
предоставляет основные функции для управления символами и строками Unicode. Он включает в себя валидацию, определение категории, нормализацию, преобразование регистра и сегментацию графем, что позволяет эффективно обрабатывать данные Unicode.
Unicode
— ModuleМодуль Unicode
предоставляет основные функции для управления символами и строками Unicode. Он включает в себя валидацию, определение категории, нормализацию, преобразование регистра и сегментацию графем, что позволяет эффективно обрабатывать данные Unicode.
Unicode.julia_chartransform
— FunctionUnicode.julia_chartransform(c::Union{Char,Integer})
Отобразите символ Unicode (Char
) или кодовую точку (Integer
) c
на соответствующий "эквивалентный" символ или кодовую точку соответственно, в соответствии с пользовательским эквивалентом, используемым в парсере Julia (в дополнение к нормализации NFC).
Например, 'µ'
(U+00B5 микро) рассматривается как эквивалент 'μ'
(U+03BC мю) парсером Julia, поэтому julia_chartransform
выполняет эту трансформацию, оставляя другие символы без изменений:
julia> Unicode.julia_chartransform('µ')
'μ': Unicode U+03BC (категория Ll: Буква, строчная)
julia> Unicode.julia_chartransform('x')
'x': ASCII/Unicode U+0078 (категория Ll: Буква, строчная)
julia_chartransform
в основном полезен для передачи в функцию Unicode.normalize
, чтобы имитировать нормализацию, используемую парсером 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 (категория Ll: Буква, строчная)
'ö': Unicode U+00F6 (категория Ll: Буква, строчная)
julia> s2 == string(Meta.parse(s))
true
Эта функция была введена в Julia 1.8.
Unicode.isassigned
— FunctionUnicode.isassigned(c) -> Bool
Возвращает true
, если данный символ или целое число является назначенной кодовой точкой Unicode.
Примеры
julia> Unicode.isassigned(101)
true
julia> Unicode.isassigned('\x01')
true
Unicode.isequal_normalized
— Functionisequal_normalized(s1::AbstractString, s2::AbstractString; casefold=false, stripmark=false, chartransform=identity)
Возвращает, являются ли s1
и s2
канонически эквивалентными строками Unicode. Если casefold=true
, игнорирует регистр (выполняет сведение регистра Unicode); если stripmark=true
, удаляет диакритические знаки и другие комбинирующие символы.
Как и в случае с Unicode.normalize
, вы также можете передать произвольную функцию через ключевое слово chartransform
(отображение Integer
кодовых точек на кодовые точки) для выполнения пользовательских нормализаций, таких как Unicode.julia_chartransform
.
Функция isequal_normalized
была добавлена в Julia 1.8.
Примеры
Например, строку "noël"
можно построить двумя канонически эквивалентными способами в Unicode, в зависимости от того, образована ли "ë"
из одной кодовой точки U+00EB или из ASCII-символа 'e'
, за которым следует комбинирующий символ U+0308 диэрезис.
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.normalize
— FunctionUnicode.normalize(s::AbstractString; keywords...)
Unicode.normalize(s::AbstractString, normalform::Symbol)
Нормализуйте строку s
. По умолчанию выполняется каноническое составление (compose=true
) без обеспечения стабильности версий Unicode (compat=false
), что приводит к получению самой короткой возможной эквивалентной строки, но может ввести составные символы, отсутствующие в более ранних версиях Unicode.
В качестве альтернативы можно указать одну из четырех "нормальных форм" стандарта Unicode: normalform
может быть :NFC
, :NFD
, :NFKC
или :NFKD
. Нормальные формы C (каноническое составление) и D (каноническое разложение) преобразуют различные визуально идентичные представления одной и той же абстрактной строки в одну каноническую форму, при этом форма C более компактна. Нормальные формы KC и KD дополнительно канонизируют "эквиваленты совместимости": они преобразуют символы, которые абстрактно схожи, но визуально различны, в один канонический выбор (например, они расширяют лигатуры в отдельные символы), при этом форма KC более компактна.
В качестве альтернативы более тонкий контроль и дополнительные преобразования могут быть получены путем вызова Unicode.normalize(s; keywords...)
, где указывается любое количество следующих булевых параметров (все по умолчанию равны false
, кроме compose
):
compose=false
: не выполнять каноническое составлениеdecompose=true
: выполнять каноническое разложение вместо канонического составления (compose=true
игнорируется, если присутствует)compat=true
: эквиваленты совместимости канонизируютсяcasefold=true
: выполнять сведение регистра Unicode, например, для нечувствительного к регистру сравнения строкnewline2lf=true
,newline2ls=true
илиnewline2ps=true
: преобразовать различные последовательности новой строки (LF, CRLF, CR, NEL) в символ перевода строки (LF), разделения строк (LS) или разделения абзацев (PS) соответственноstripmark=true
: удалить диакритические знаки (например, акценты)stripignore=true
: удалить "по умолчанию игнорируемые" символы Unicode (например, мягкий дефис или маркер слева направо)stripcc=true
: удалить управляющие символы; горизонтальные табуляции и переводы страниц преобразуются в пробелы; новые строки также преобразуются в пробелы, если не был указан флаг преобразования новой строкиrejectna=true
: выдать ошибку, если найдены не назначенные кодовые точкиstable=true
: обеспечить стабильность версий Unicode (никогда не вводить символы, отсутствующие в более ранних версиях Unicode)
Вы также можете использовать параметр chartransform
(по умолчанию равный identity
), чтобы передать произвольную функцию, сопоставляющую кодовые точки Integer
с кодовыми точками, которая вызывается для каждого символа в s
по мере его обработки, чтобы выполнить произвольные дополнительные нормализации. Например, передав chartransform=Unicode.julia_chartransform
, вы можете применить несколько специфических для Julia нормализаций символов, которые выполняет Julia при разборе идентификаторов (в дополнение к нормализации NFC: compose=true, stable=true
).
Например, 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"
Аргумент ключевого слова chartransform
требует Julia 1.8.
Unicode.graphemes
— Functiongraphemes(s::AbstractString) -> GraphemeIterator
Возвращает итератор по подстрокам s
, которые соответствуют расширенным графемам в строке, как это определено в Unicode UAX #29. (Грубо говоря, это то, что пользователи воспринимают как отдельные символы, даже если они могут содержать более одного кодовой точки; например, буква, объединенная с акцентом, является одной графемой.)
graphemes(s::AbstractString, m:n) -> SubString
Возвращает SubString
строки s
, состоящую из m
-го по n
-й графем строки s
, где второй аргумент m:n
является целочисленным AbstractUnitRange
.
Грубо говоря, это соответствует m:n
-м воспринимаемым пользователем "символам" в строке. Например:
julia> s = graphemes("exposé", 3:6)
"posé"
julia> collect(s)
5-element Vector{Char}:
'p': ASCII/Unicode U+0070 (категория Ll: Буква, строчная)
'o': ASCII/Unicode U+006F (категория Ll: Буква, строчная)
's': ASCII/Unicode U+0073 (категория Ll: Буква, строчная)
'e': ASCII/Unicode U+0065 (категория Ll: Буква, строчная)
'́': Unicode U+0301 (категория Mn: Знак, неразрывный)
Это состоит из 3-го по 7-й кодовые точки (Char
s) в "exposé"
, потому что графема "é"
на самом деле состоит из двух кодовых точек Unicode (буква 'e'
, за которой следует знак ударения U+0301).
Поскольку нахождение границ графем требует итерации по содержимому строки, функция graphemes(s, m:n)
требует времени, пропорционального длине строки (числу кодовых точек) перед концом подстроки.
Аргумент m:n
функции graphemes
требует Julia 1.9.