我需要將字符串轉換為字節切片,我使用函數,但是當字符串具有字母?或帶有重音符號的某個字母時,我得到的值與預期不同。[]byte(string)fmt.Println([]byte("áéíóú?áéíóú?"))預期結果:[ 160 130 161 162 163 181 144 214 224 233 ]獲得的結果:[195 161 195 169 195 173 195 179 195 186 195 177 195 129 195 137 195 141 195 147 195 154 195 145]因此,當我將獲得的值轉換為字符串時,我得到而不是├í├?├?├│├║├?├ü├?├ì├?├ü├?áéíóú?áéíóú?如何獲得正確的值?
2 回答

子衿沉夜
TA貢獻1828條經驗 獲得超3個贊
這里有幾個問題。首先,您給出以下預期結果:
[ 160 130 161 162 163 181 144 214 224 233 ]
但是你省略了 和 ,所以預期結果應該是:??
[160 130 161 162 163 164 181 144 214 224 233 165]
其次,您鏈接到 [1] 的這個頁面說它是代碼頁 437,但它實際上是代碼頁 850。您可以看到“其他相關編碼”[2]下列出了850。下面是一個工作示例 [3]:
package main
import (
"fmt"
"golang.org/x/text/encoding/charmap"
)
func main() {
b := []byte("áéíóú?áéíóú?")
c, e := charmap.CodePage850.NewEncoder().Bytes(b)
if e != nil {
panic(e)
}
fmt.Println(c)
}

慕雪6442864
TA貢獻1812條經驗 獲得超5個贊
對于這些字符,您可以使用 ascii85 編碼器/解碼器。
字節切片將與您的期望不匹配,但是,輸出將與您的輸入匹配。(我假設這是這里的關鍵)
package mainimport ( "encoding/ascii85" "fmt")func main() { enc := make([]byte, 30, 30) dec := make([]byte, 30, 30) ascii85.Encode(enc, []byte("áéíóú?áéíóú?")) ascii85.Decode(dec, enc, false) fmt.Println(enc) fmt.Println(string(dec)) }
https://golang.org/pkg/encoding/ascii85/
https://play.golang.org/p/ErBSKYVBXNg
- 2 回答
- 0 關注
- 133 瀏覽
添加回答
舉報
0/150
提交
取消