Go 言語は、効率性、同時実行性、移植性を備えた最新のプログラミング言語です。実際のアプリケーションでは、多くの場合、異なるエンコーディング間の変換の問題に対処する必要があります。この記事では、golang でのエンコード変換ソリューションを紹介します。
コンピューターでは、文字は多くの場合、ASCII コード、GB2312、UTF-8 などのデジタル エンコーディングとして表現されます。異なるエンコーディング間の文字マッピング関係は異なり、それがそれぞれの欠点と利点にもつながります。
ASCII コードは一般的に使用されるエンコード方式ですが、大文字、小文字、数字、一部の特殊文字を含む 128 文字しか表現できないため、国際化への適用が制限されます。 GB2312 は、約 7,000 の漢字を表現できる漢字エンコード方式ですが、普及しているのは中国国内のみです。同様に、UTF-8 エンコードも一般的に使用されるエンコード方式で、世界中の文字を表現できますが、東アジア言語を扱う場合、GB2312 や GB18030 に比べてバイト数が多くなるという欠点があります。
したがって、対応するシナリオで使用するには、異なるエンコーディング間で変換する必要があります。
Golang の標準ライブラリは、エンコーディングと Unicode パッケージを提供します。これらは、エンコーディング関連の問題と Unicode コード ポイント関連の問題にそれぞれ対処するために使用されます。質問。
golang では、文字はルーン タイプとして表現され、文字列は一連のルーン タイプで構成されます。 golangでよく使われるエンコード変換関数とその例を紹介します。
2.1 golang のエンコーディング変換関数
2.1.1 bytes パッケージ
bytes パッケージは、バイナリ データの読み取りと書き込みのためのいくつかの関数を提供します。その一部は解析に特化されています。そして文字列をシリアル化します。
関数名 function
func ToUpperSpecial 文字列を大文字に変換し、カスタム Locale をサポートします。
func ToLowerSpecial 文字列を小文字に変換し、カスタム Locale をサポートします
func ToTitleSpecial 文字列をタイトル形式に変換します。カスタム Locale をサポートします。
func ToUpper 文字列を大文字に変換します。
#func ToLower 文字列を小文字に変換しますfunc ToTitle 文字列をタイトルに変換しますformat func Title 文字列全体をタイトルに変換します format func TrimSpace 文字列の先頭と末尾のスペースを削除します func Trim 文字を削除します 先頭の指定文字func TrimFunc 文字列の先頭と末尾にある指定された関数を削除します。 func TrimLeftFunc 文字列 の左側にある指定された関数を削除します。 func TrimRightFunc 文字列の右側にある指定された関数を削除します。 func HasPrefix 文字列に指定されたプレフィックスが含まれるかどうかを判断します。 func HasSuffix 文字列に指定されたサフィックスが含まれるかどうかを判断します。 func Index 文字列内で指定された部分文字列が最初に出現する位置を返します。 Positionfunc LastIndex 文字列内で指定された部分文字列が最後に出現する位置を返します。func IndexFunc文字列内で指定された条件を満たす文字が最初に出現する func LastIndexFunc 文字列内で指定された条件を満たす文字が最後に出現する位置を返します func IndexByte 位置を返します文字列内で指定された文字が最初に出現する回数 func LastIndexByte 文字列内で最後に出現した文字を返します。 指定された文字が出現する位置 func Count 文字列内で最初に出現した文字の回数を返します。指定された部分文字列が文字列内に出現しますfunc Replace 文字列内の指定された部分文字列を別の文字列に置き換えます func ReplaceAll 文字列内のすべての指定された部分文字列を別の文字列に置き換えますfunc Split指定された区切り文字に従って文字列をスライスに分割します func SplitN 指定された区切り文字に従って文字列をスライスに分割します (最大 N 回) func SplitAfter 指定された区切り文字に従って文字列をスライスに分割します接尾辞、接尾辞は各部分文字列に含まれます func SplitAfterN 指定された接尾辞に従って文字列をスライスに分割します。接尾辞は各部分文字列に含まれ、最大 N 回分割されますfunc Join 指定された区切り文字に従って、文字列スライスを 1 つの文字列に結合します。##2.1.2 エンコード パッケージ
encoding パッケージは、次のようなさまざまな文字エンコード方法をエンコードおよびデコードするための一連の関数を提供します。 UTF-8、GB2312など
関数名 function
func Decode 指定されたエンコーディングのバイト スライスを UTF-8 形式のルーン スライスにデコードします。
func DecodeRune 指定されたエンコーディングのバイト スライスをデコードします。単一のルーンに変換
func DecodeLastRune 指定されたエンコーディングのバイト スライスから最後のルーンをデコードします
func Encode ルーン スライスを指定されたエンコーディングのバイト スライスに変換します
func RuneCount 計算 ルーン スライス内のルーンの数
func Runes 指定されたエンコード バイト スライスをルーン スライスにデコードします
2.1.3 unicode パッケージ
unicode パッケージは、次の機能を提供します。関数 文字が数字、文字などであるかどうかを判断するために使用されます。
関数名 Function
func IsDigit 文字が数字かどうかを判断します
func IsLetter 文字が文字かどうかを判断します
func IsLower 判斷字元是否為小寫字母
func IsUpper 判斷字元是否為大寫字母
func IsPunct 判斷字元是否為標點符號
func IsGraphic 判斷字元是否為可視圖形字元
2.2 golang中的編碼轉換範例
下面是一些golang中的編碼轉換範例:
2.2.1 UTF-8編碼轉換為GB2312
範例1:使用golang的encoding套件,在UTF-8編碼和GB2312編碼之間進行轉換。
package main import ( "fmt" "github.com/axgle/mahonia" ) func main() { str := "你好,世界!" enc := mahonia.NewEncoder("GB2312") newStr := enc.ConvertString(str) fmt.Println(newStr) }
2.2.2 GB2312編碼轉換為UTF-8
範例2:使用golang的encoding包,在GB2312編碼和UTF-8編碼之間進行轉換。
package main import ( "fmt" "github.com/axgle/mahonia" ) func main() { str := "你好,世界!" dec := mahonia.NewDecoder("GB2312") newStr := dec.ConvertString(str) fmt.Println(newStr) }
在實際應用中,編碼轉換問題是一個常見的問題。本篇文章介紹了golang中的編碼轉換解決方案,主要透過encoding和unicode套件提供的函數來實現不同編碼之間的轉換。透過學習這些內容,對於在golang中進行編碼轉換的操作,我們應該有更深入的理解和更準確的實踐能力。
以上がgolang エンコード変換の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。