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.

UnicodeModule

Das 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.

source
Unicode.julia_chartransformFunction
Unicode.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
Julia 1.8

Diese Funktion wurde in Julia 1.8 eingeführt.

source
Unicode.isassignedFunction
Unicode.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
source
Unicode.isequal_normalizedFunction
isequal_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.

Julia 1.8

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
source
Unicode.normalizeFunction
Unicode.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ühren
  • decompose=true: stattdessen kanonische Dekompensation durchführen (compose=true wird ignoriert, wenn vorhanden)
  • compat=true: Kompatibilitätsequivalente werden kanonisiert
  • casefold=true: Unicode-Groß-/Kleinschreibung durchführen, z. B. für groß-/kleinsensitive String-Vergleiche
  • newline2lf=true, newline2ls=true oder newline2ps=true: verschiedene Zeilenumbruchssequenzen (LF, CRLF, CR, NEL) in ein Zeilenumbruchzeichen (LF), ein Zeilen-Trennzeichen (LS) oder ein Absatz-Trennzeichen (PS) konvertieren
  • stripmark=true: diakritische Zeichen (z. B. Akzente) entfernen
  • stripignore=true: Unicode's "standardmäßig ignorierbare" Zeichen (z. B. den weichen Bindestrich oder den Links-nach-Rechts-Marker) entfernen
  • stripcc=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 angegeben
  • rejectna=true: einen Fehler auslösen, wenn nicht zugewiesene Codepunkte gefunden werden
  • stable=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"
Julia 1.8

Das Schlüsselwortargument chartransform erfordert Julia 1.8.

source
Unicode.graphemesFunction
graphemes(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.)

source
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 (Chars) 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.

Julia 1.9

Das Argument m:n von graphemes erfordert Julia 1.9.

```

source