github.com/shogo82148/std@v1.22.1-0.20240327122250-4e474527810c/unicode/utf8/utf8.go (about) 1 // Copyright 2009 The Go Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style 3 // license that can be found in the LICENSE file. 4 5 // パッケージutf8はUTF-8でエンコードされたテキストをサポートするための関数や定数を実装しています。ルーンとUTF-8バイトシーケンスの変換を行うための関数も含まれています。 6 // 詳細はhttps://en.wikipedia.org/wiki/UTF-8を参照してください。 7 package utf8 8 9 // エンコーディングに基本的な数値。 10 const ( 11 RuneError = '\uFFFD' 12 RuneSelf = 0x80 13 MaxRune = '\U0010FFFF' 14 UTFMax = 4 15 ) 16 17 // FullRuneは、pのバイトがルーンの完全なUTF-8エンコードで始まるかどうかを報告します。 18 // 無効なエンコーディングは完全なルーンと見なされるため、幅-1のエラールーンとして変換されます。 19 func FullRune(p []byte) bool 20 21 // FullRuneInString は FullRune と似ていますが、入力は文字列です。 22 func FullRuneInString(s string) bool 23 24 // DecodeRuneはpの最初のUTF-8エンコーディングを展開し、ルーンと 25 // そのバイト幅を返します。もしpが空なら、([RuneError], 0)を返します。それ以外の場合、 26 // エンコーディングが無効なら、(RuneError, 1)を返します。これらは正しい、空でないUTF-8に対しては 27 // 不可能な結果です。 28 // 29 // エンコーディングが無効な場合は、それが不正なUTF-8である、範囲外のルーンをエンコードしている、 30 // または値のための最短可能なUTF-8エンコーディングでない場合です。 31 // それ以外の検証は行われません。 32 func DecodeRune(p []byte) (r rune, size int) 33 34 // DecodeRuneInStringは [DecodeRune] と同様ですが、入力は文字列です。もしsが 35 // 空なら、([RuneError], 0)を返します。それ以外の場合、 36 // エンコーディングが無効なら、(RuneError, 1)を返します。これらは正しい、空でない 37 // UTF-8に対しては不可能な結果です。 38 // 39 // エンコーディングが無効な場合は、それが不正なUTF-8である、範囲外のルーンをエンコードしている、 40 // または値のための最短可能なUTF-8エンコーディングでない場合です。 41 // それ以外の検証は行われません。 42 func DecodeRuneInString(s string) (r rune, size int) 43 44 // DecodeLastRuneはpの最後のUTF-8エンコーディングを展開し、ルーンと 45 // そのバイト幅を返します。もしpが空なら、([RuneError], 0)を返します。それ以外の場合、 46 // エンコーディングが無効なら、(RuneError, 1)を返します。これらは正しい、空でないUTF-8に対しては 47 // 不可能な結果です。 48 // 49 // エンコーディングが無効な場合は、それが不正なUTF-8である、範囲外のルーンをエンコードしている、 50 // または値のための最短可能なUTF-8エンコーディングでない場合です。 51 // それ以外の検証は行われません。 52 func DecodeLastRune(p []byte) (r rune, size int) 53 54 // DecodeLastRuneInStringは [DecodeLastRune] と同様ですが、入力は文字列です。もしsが 55 // 空なら、([RuneError], 0)を返します。それ以外の場合、 56 // エンコーディングが無効なら、(RuneError, 1)を返します。これらは正しい、空でない 57 // UTF-8に対しては不可能な結果です。 58 // 59 // エンコーディングが無効な場合は、それが不正なUTF-8である、範囲外のルーンをエンコードしている、 60 // または値のための最短可能なUTF-8エンコーディングでない場合です。 61 // それ以外の検証は行われません。 62 func DecodeLastRuneInString(s string) (r rune, size int) 63 64 // RuneLenはルーンをUTF-8でエンコードするために必要なバイト数を返します。 65 // ルーンがUTF-8でエンコードすることができない場合は、-1を返します。 66 func RuneLen(r rune) int 67 68 // EncodeRuneは、ルーンのUTF-8エンコーディングをpに書き込みます(これは十分に大きくなければなりません)。 69 // もしルーンが範囲外であれば、[RuneError] のエンコーディングを書き込みます。 70 // 書き込まれたバイト数を返します。 71 func EncodeRune(p []byte, r rune) int 72 73 // AppendRuneは、rのUTF-8エンコーディングをpの末尾に追加し、 74 // 拡張されたバッファを返します。もしルーンが範囲外であれば、 75 // [RuneError] のエンコーディングを追加します。 76 func AppendRune(p []byte, r rune) []byte 77 78 // RuneCount は p 内のルーンの数を返します。間違ったエンコーディングや短いエンコーディングは、1バイトの幅を持つ単一のルーンとして扱われます。 79 func RuneCount(p []byte) int 80 81 // RuneCountInString is like [RuneCount] but its input is a string. 82 func RuneCountInString(s string) (n int) 83 84 // RuneStartは、バイトが符号化された(おそらく無効な)ルーンの最初のバイトであるかどうかを報告します。2番目以降のバイトは常に上位2ビットが10に設定されます。 85 func RuneStart(b byte) bool 86 87 // Validは、pが完全に有効なUTF-8エンコードされたルーンで構成されているかどうかを示します。 88 func Valid(p []byte) bool 89 90 // ValidStringは、sが完全に有効なUTF-8エンコードされたルーンで構成されているかどうかを報告します。 91 func ValidString(s string) bool 92 93 // ValidRuneは、rがUTF-8として正当にエンコードされるかどうかを報告します。 94 // 範囲外のコードポイントやサロゲートペアの半分は不正です。 95 func ValidRune(r rune) bool