Go 文字列内の変換不可能なバイトの検出
Go では、特定のバイト シーケンスを有効な Unicode 文字として解釈できません。これらの無効なシーケンスを検出することは、シームレスな文字列処理にとって重要です。詳細な説明は次のとおりです:
UTF-8 有効性チェック:
Tim Cooper 氏が述べたように、utf8.Valid を使用して UTF-8 の有効性を確認できます。ただし、Go 文字列には UTF-8 以外の文字が含まれる可能性があることに注意することが重要です。これは、文字列は本質的にバイトのスライスであり、これらのバイトが常に UTF-8 エンコーディングに準拠するとは限らないためです。
デコード動作:
Go は UTF のみを実行します。 2 つの特定のインスタンスでの -8 デコード:
これらの両方で場合によっては、無効な UTF-8 文字は Unicode コード ポイント U FFFD に置き換えられ、サポートされていない文字のプレースホルダーとして機能します。 glyphs.
クラッシュの例外:
これらの変換は決してクラッシュしないことに注意してください。したがって、UTF-8 の有効性を明示的にチェックする必要があるのは、代わりに U FFFD を受け入れられない入力を処理する場合など、アプリケーションで必要な場合に限られます。
例:
次のコードは、Go が無効な UTF-8 を処理する方法を示しています。 bytes:
package main import "fmt" func main() { a := []byte{0xff} s := string(a) fmt.Println(s) for _, r := range s { fmt.Println(r) } rs := []rune(s) fmt.Println(rs) }
Output:
� 65533 [65533]
ご覧のとおり、文字列全体を出力すると、無効なバイト シーケンスは � として表示されます。反復処理すると、U FFFD の Unicode コード ポイントが返されます。そして、ルーンのスライスに変換すると、U FFFD を表す単一のルーンが返されます。
したがって、無効な UTF-8 バイトを文字列に変換するときに Go がクラッシュすることはありませんが、特定のルーン文字に注意することが重要です。動作を確認し、アプリケーションでそれに応じて処理します。
以上がGo は文字列内の変換不可能なバイトをどのように処理し、検出するのでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。