如何在Go語言中將HTTP請求返回的Unicode編碼中文字符轉換為可讀的GBK編碼?

如何在Go語言中將HTTP請求返回的Unicode編碼中文字符轉換為可讀的GBK編碼?

go語言http請求:正確顯示中文字符

在使用Go語言處理HTTP請求時,經常遇到響應內容中包含Unicode編碼的中文字符,導致顯示為亂碼。本文將提供解決方案,實現Unicode到可讀中文的轉換。

問題:Unicode編碼中文顯示為亂碼

Go語言HTTP請求的響應內容中,中文字符可能以Unicode編碼形式出現(例如u5f20u4e09而不是“張三”)。

解決方案:Unicode到GBK編碼轉換

立即學習go語言免費學習筆記(深入)”;

為了解決這個問題,我們需要將Unicode編碼的字符串轉換為GBK編碼。 這需要用到golang.org/x/text/encoding/simplifiedchinese包。

首先,需要引入必要的包:

import (     "bytes"     "fmt"     "io"     "net/http"     "net/url"     "golang.org/x/text/encoding/simplifiedchinese" )

然后,添加一個轉換函數:

func convertUnicodeToGBK(str String) (string, error) {     utf8Bytes, err := simplifiedchinese.UTF8.NewDecoder().Bytes([]byte(str))     if err != nil {         return "", fmt.Errorf("unicode to utf8 decode error: %w", err)     }     gbkBytes, err := simplifiedchinese.GBK.NewEncoder().Bytes(utf8Bytes)     if err != nil {         return "", fmt.Errorf("utf8 to gbk encode error: %w", err)     }     return string(gbkBytes), nil }

這個函數首先將Unicode字符串解碼為UTF-8,然后將UTF-8編碼的字節數組編碼為GBK。 錯誤處理更加完善,返回了具體的錯誤信息。

最后,在main函數或其他處理響應內容的地方調用該函數:

func main() {     // ... (之前的代碼保持不變) ...      resp, err := client.Do(req)     if err != nil {         return "", err     }     defer resp.Body.Close() // 記得關閉響應體      body, err := io.ReadAll(resp.Body)     if err != nil {         return "", err     }      convertedContent, err := convertUnicodeToGBK(string(body))     if err != nil {         fmt.Printf("Conversion error: %vn", err)         return "", err     }      fmt.Println(convertedContent)     // ... (后續代碼保持不變) ... }

通過convertUnicodeToGBK函數,將HTTP響應體內容轉換為GBK編碼,從而正確顯示中文字符。 注意添加了defer resp.Body.Close()來確保正確關閉響應體,避免資源泄漏。 并且對錯誤進行了更細致的處理。 這個改進后的方案更健壯,更易于調試和維護。

這個完整的解決方案避免了直接使用string(body)帶來的潛在編碼問題,并提供了更清晰的錯誤處理機制。 記住在使用前安裝golang.org/x/text包:go get golang.org/x/text/encoding/simplifiedchinese

? 版權聲明
THE END
喜歡就支持一下吧
點贊10 分享