Unicode
Das Unicode
-Modul bietet grundlegende Funktionen zur Verwaltung von Unicode-Zeichen und -Strings. Es umfasst Validierung, Kategoriebestimmung, Normalisierung, Groß- und Kleinschreibungstransformation sowie Graphemsegmentierung, die eine effektive Handhabung von Unicode-Daten ermöglichen.
Unicode
— ModuleDas Unicode
-Modul bietet grundlegende Funktionen zur Verwaltung von Unicode-Zeichen und -Strings. Es umfasst Validierung, Kategoriebestimmung, Normalisierung, Groß-/Kleinschreibungstransformation und Graphemsegmentierung, die eine effektive Handhabung von Unicode-Daten ermöglichen.
Unicode.julia_chartransform
— FunctionUnicode.julia_chartransform(c::Union{Char,Integer})
Ordne das Unicode-Zeichen (Char
) oder den Codepunkt (Integer
) c
dem entsprechenden "äquivalenten" Zeichen oder Codepunkt zu, gemäß der benutzerdefinierten Äquivalenz, die im Julia-Parser verwendet wird (neben der NFC-Normalisierung).
Zum Beispiel wird 'µ'
(U+00B5 Mikro) von Julias Parser als äquivalent zu 'μ'
(U+03BC Mu) behandelt, sodass julia_chartransform
diese Transformation durchführt, während andere Zeichen unverändert bleiben:
julia> Unicode.julia_chartransform('µ')
'μ': Unicode U+03BC (Kategorie Ll: Buchstabe, Kleinbuchstabe)
julia> Unicode.julia_chartransform('x')
'x': ASCII/Unicode U+0078 (Kategorie Ll: Buchstabe, Kleinbuchstabe)
julia_chartransform
ist hauptsächlich nützlich, um an die Unicode.normalize
Funktion übergeben zu werden, um die Normalisierung zu imitieren, die vom Julia-Parser verwendet wird:
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 (Kategorie Ll: Buchstabe, Kleinbuchstabe)
'ö': Unicode U+00F6 (Kategorie Ll: Buchstabe, Kleinbuchstabe)
julia> s2 == string(Meta.parse(s))
true
Diese Funktion wurde in Julia 1.8 eingeführt.
Unicode.isassigned
— FunctionUnicode.isassigned(c) -> Bool
Gibt true
zurück, wenn der angegebene Charakter oder die angegebene Ganzzahl ein zugewiesener Unicode-Codepunkt ist.
Beispiele
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)
Gibt zurück, ob s1
und s2
kanonisch äquivalente Unicode-Zeichenfolgen sind. Wenn casefold=true
, wird die Groß- und Kleinschreibung ignoriert (führt Unicode-Groß-/Kleinschreibung durch); wenn stripmark=true
, werden diakritische Zeichen und andere kombinierende Zeichen entfernt.
Wie bei Unicode.normalize
können Sie auch eine beliebige Funktion über das Schlüsselwort chartransform
übergeben (die Integer
-Codepunkte auf Codepunkte abbildet), um benutzerdefinierte Normalisierungen durchzuführen, wie z.B. Unicode.julia_chartransform
.
Die Funktion isequal_normalized
wurde in Julia 1.8 hinzugefügt.
Beispiele
Zum Beispiel kann die Zeichenfolge "noël"
auf zwei kanonisch äquivalente Arten in Unicode konstruiert werden, abhängig davon, ob "ë"
aus einem einzelnen Codepunkt U+00EB oder aus dem ASCII-Zeichen 'e'
gefolgt von dem kombinierenden Zeichen U+0308 (Trema) gebildet wird.
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)
Normalisieren Sie den String s
. Standardmäßig wird die kanonische Komposition (compose=true
) durchgeführt, ohne die Stabilität der Unicode-Versionierung sicherzustellen (compat=false
), was den kürzest möglichen äquivalenten String erzeugt, aber Kompositionszeichen einführen kann, die in früheren Unicode-Versionen nicht vorhanden sind.
Alternativ kann eine der vier "Normalformen" des Unicode-Standards angegeben werden: normalform
kann :NFC
, :NFD
, :NFKC
oder :NFKD
sein. Die Normalformen C (kanonische Komposition) und D (kanonische Dekompensation) konvertieren verschiedene visuell identische Darstellungen desselben abstrakten Strings in eine einzige kanonische Form, wobei Form C kompakter ist. Die Normalformen KC und KD kanonisieren zusätzlich "Kompatibilitätsequivalente": Sie konvertieren Zeichen, die abstrakt ähnlich, aber visuell unterschiedlich sind, in eine einzige kanonische Wahl (z. B. erweitern sie Ligaturen in die einzelnen Zeichen), wobei Form KC kompakter ist.
Alternativ kann eine feinere Kontrolle und zusätzliche Transformationen durch den Aufruf von Unicode.normalize(s; keywords...)
erreicht werden, wobei eine beliebige Anzahl der folgenden booleschen Schlüsselwortoptionen (die alle standardmäßig auf false
gesetzt sind, außer für compose
) angegeben werden kann:
compose=false
: keine kanonische Komposition durchführendecompose=true
: stattdessen kanonische Dekompensation durchführen (compose=true
wird ignoriert, wenn vorhanden)compat=true
: Kompatibilitätsequivalente werden kanonisiertcasefold=true
: Unicode-Groß-/Kleinschreibung durchführen, z. B. für groß-/kleinsensitive String-Vergleichenewline2lf=true
,newline2ls=true
odernewline2ps=true
: verschiedene Zeilenumbruchssequenzen (LF, CRLF, CR, NEL) in ein Zeilenumbruchzeichen (LF), ein Zeilen-Trennzeichen (LS) oder ein Absatz-Trennzeichen (PS) konvertierenstripmark=true
: diakritische Zeichen (z. B. Akzente) entfernenstripignore=true
: Unicode's "standardmäßig ignorierbare" Zeichen (z. B. den weichen Bindestrich oder den Links-nach-Rechts-Marker) entfernenstripcc=true
: Steuerzeichen entfernen; horizontale Tabs und Seitenumbrüche werden in Leerzeichen umgewandelt; Zeilenumbrüche werden ebenfalls in Leerzeichen umgewandelt, es sei denn, ein Zeilenumwandlungs-Flag wurde angegebenrejectna=true
: einen Fehler auslösen, wenn nicht zugewiesene Codepunkte gefunden werdenstable=true
: die Stabilität der Unicode-Versionierung durchsetzen (niemals Zeichen einführen, die in früheren Unicode-Versionen fehlen)
Sie können auch das Schlüsselwort chartransform
verwenden (das standardmäßig auf identity
gesetzt ist), um eine beliebige Funktion zu übergeben, die Integer
-Codepunkte auf Codepunkte abbildet, die auf jedes Zeichen in s
angewendet wird, während es verarbeitet wird, um beliebige zusätzliche Normalisierungen durchzuführen. Zum Beispiel können Sie durch die Übergabe von chartransform=Unicode.julia_chartransform
einige Julia-spezifische Zeichennormalisierungen anwenden, die von Julia beim Parsen von Bezeichnern durchgeführt werden (neben der NFC-Normalisierung: compose=true, stable=true
).
Zum Beispiel entspricht NFKC den Optionen compose=true, compat=true, stable=true
.
Beispiele
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"
Das Schlüsselwortargument chartransform
erfordert Julia 1.8.
Unicode.graphemes
— Functiongraphemes(s::AbstractString) -> GraphemeIterator
Gibt einen Iterator über Teilstrings von s
zurück, die den erweiterten Graphemen im String entsprechen, wie sie durch Unicode UAX #29 definiert sind. (Ungefähr sind dies das, was Benutzer als einzelne Zeichen wahrnehmen würden, auch wenn sie mehr als einen Codepunkt enthalten können; zum Beispiel ist ein Buchstabe kombiniert mit einem Akzentzeichen ein einzelner Graphem.)
graphemes(s::AbstractString, m:n) -> SubString
Gibt einen SubString
von s
zurück, der aus den m
-ten bis n
-ten Graphemen des Strings s
besteht, wobei das zweite Argument m:n
ein ganzzahliger AbstractUnitRange
ist.
Locker gesprochen entspricht dies den m:n
-ten vom Benutzer wahrgenommenen "Zeichen" im String. Zum Beispiel:
julia> s = graphemes("exposé", 3:6)
"posé"
julia> collect(s)
5-element Vector{Char}:
'p': ASCII/Unicode U+0070 (Kategorie Ll: Buchstabe, Kleinbuchstabe)
'o': ASCII/Unicode U+006F (Kategorie Ll: Buchstabe, Kleinbuchstabe)
's': ASCII/Unicode U+0073 (Kategorie Ll: Buchstabe, Kleinbuchstabe)
'e': ASCII/Unicode U+0065 (Kategorie Ll: Buchstabe, Kleinbuchstabe)
'́': Unicode U+0301 (Kategorie Mn: Zeichen, nicht trennend)
Dies besteht aus den 3. bis 7. Codepunkten (Char
s) in "exposé"
, da das Graphem "é"
tatsächlich zwei Unicode-Codepunkte (ein 'e'
gefolgt von einem akzentuierenden Kombinationszeichen U+0301) ist.
Da das Finden von Graphemgrenzen eine Iteration über den Inhalt des Strings erfordert, benötigt die Funktion graphemes(s, m:n)
eine Zeit, die proportional zur Länge des Strings (Anzahl der Codepunkte) vor dem Ende des Substrings ist.
Das Argument m:n
von graphemes
erfordert Julia 1.9.
```