Unicode

Unicode.isassigned ── 関数
Unicode.isassigned(c) -> Bool

与えられた文字あるいは整数に Unicode 符号位置が割り当てられていれば true を返します。

julia> Unicode.isassigned(101)
true

julia> Unicode.isassigned('\x01')
true
Unicode.normalize ── 関数
Unicode.normalize(s::AbstractString; keywords...)
Unicode.normalize(s::AbstractString, normalform::Symbol)

文字列 s を正規化します。デフォルト (compose=true) では正準合成による正規化 (NFC) が Unicode のバージョン安定性を保証せずに行われます。このとき入力文字列と (正準) 等価な文字列の中で最も短いものが生成されますが、以前の Unicode バージョンに存在しない結合文字が現れる可能性があります。

normalform には Unicode 規格にある四つの正規化形式 :NFC, :NFD, :NFKC, :NFKD のいずれかを指定できます。正規化形式 C (正準合成) と D (正準分解) は視覚的に同一な異なる抽象文字列の表現を単一の正準な形式に変換し、C と D では C の方がコンパクトになります。正規化形式 KC と KD はさらに「互換等価」な文字の並びを正準化します: つまり、抽象的には似ているものの視覚的に異なる文字を全て単一の正準な文字に変換します (例えば合字をそれぞれの文字に分けます)。KC と KD では KC の方がコンパクトになります。

Unicode.normalize(s; keywords...) を呼び出すと細かい制御や追加の変形を行えます。次に示す真偽値のキーワード引数から任意の個数を指定できます。デフォルトでは compose だけが true で、他は全て false です:

  • compose=false: 正準合成を行いません。
  • decompose=true: 正準合成ではなく正準分解を行います。compose=true が指定されていても無視します。
  • compat=true: 互換等価な文字の並びを正準化します。
  • casefold=true: Unicode が定義する小文字への変換 (case folding) を行います。例えば大文字・小文字を区別しない文字列比較で使います。
  • newline2lf=true, newline2ls=true, newline2ps=true: 改行を示す文字の並び (LF, CRLF, CR, NEL) を、それぞれラインフィード (LF)・行分離文字 (LS)・段落分離文字 (PS) に変換します。
  • stripmark=true: 発音区別符号 (アクセントなど) を削除します。
  • stripignore=true: Unicode が定義するデフォルトで無視可能 (default ignorable) な文字 (ソフトハイフンや left-to-right marker など) を削除します。
  • stripcc=true: 制御文字を削除します。水平タブとフォームフィードはスペースになり、改行を変換するフラグが指定されなければ改行もスペースになります。
  • rejectna=true: 未割当の符号位置が見つかった場合にエラーを送出します。
  • stable=true: Unicode バージョンの安定性を保持します (以前の Unicode バージョンに存在しない文字を使いません)。

例えば NFKC は compose=true, compat=true, stable=true というオプションに対応します。

julia> #左辺: Unicode U+00e9, 右辺: U+0065 & U+0301
       "é" == Unicode.normalize("é")
true

julia> #左辺: Unicode U+03bc, 右辺: Unicode U+00b5
       "μ" == Unicode.normalize("µ", compat=true)
true

julia> Unicode.normalize("JuLiA", casefold=true)
"julia"

julia> Unicode.normalize("JúLiA", stripmark=true)
"JuLiA"
Unicode.graphemes ── 関数
graphemes(s::AbstractString) -> GraphemeIterator

文字列 s に含まれる拡張書記素それぞれに対応する s の部分文字列を生成する反復子を返します。拡張書記素は Unicode UAX #29 で定義されます。大まかに言うとユーザーが “一文字” と認識するであろう部分が一つの書記素であり、単一の書記素は複数の符号位置からなる可能性があります。例えばアクセントマークが付いた文字は単一の書記素です。