GO和PHP在chr()函数处理后,PHP字符串合并后又能正确显示,而Go乱码呢?

最近在做一个php项目到go的迁移 遇到这样一个问题

php在chr函数处理后 能正确打印出文字,而Go会乱码

PHP代码如下
// 码点值
$a = [
    228, 184, 128, 228, 184, 170, 230, 152, 159, 230,
    156, 159, 229, 183, 166, 229, 143, 179, 9, 56, 48,
    50, 54, 57, 51, 56, 9, 112, 104, 111, 110, 101
];

$result = '';
foreach ($a as $value) {
    $result .= chr($value);
}

var_dump($result);

结果:string(32) "一个星期左右        8026938 phone"
Go代码如下:
arr := [500] rune{228, 184, 128, 228, 184, 170, 230, 152, 159, 230,156, 159, 229, 183, 166, 229, 143, 179, 9, 56, 48,50, 54, 57, 51, 56, 9, 112, 104, 111, 110, 101}
result1 := ""
for v := range arr {
    result1 += string(v)
}

fmt.Println(result1)

// 结果:bä¸ä¸ªææå·¦å³    8026938    phone

感谢帮忙!

pardon110
最佳答案

中文字符非单个字节可表示。你需要用字节切片类型,面非 rune 数组, 如此这般即可

b:= []byte{228, 184, 128, 228, 184, 170, 230, 152, 159, 230,156, 159, 229, 183, 166, 229, 143, 179, 9, 56, 48,50, 54, 57, 51, 56, 9, 112, 104, 111, 110, 101}
fmt.Println(string(b))    // 一个星期左右    8026938    phone
3年前 评论
codexzy (楼主) 3年前
讨论数量: 2
pardon110

中文字符非单个字节可表示。你需要用字节切片类型,面非 rune 数组, 如此这般即可

b:= []byte{228, 184, 128, 228, 184, 170, 230, 152, 159, 230,156, 159, 229, 183, 166, 229, 143, 179, 9, 56, 48,50, 54, 57, 51, 56, 9, 112, 104, 111, 110, 101}
fmt.Println(string(b))    // 一个星期左右    8026938    phone
3年前 评论
codexzy (楼主) 3年前

@Summer 是否能提供下帮助 谢谢

3年前 评论
pardon110

中文字符非单个字节可表示。你需要用字节切片类型,面非 rune 数组, 如此这般即可

b:= []byte{228, 184, 128, 228, 184, 170, 230, 152, 159, 230,156, 159, 229, 183, 166, 229, 143, 179, 9, 56, 48,50, 54, 57, 51, 56, 9, 112, 104, 111, 110, 101}
fmt.Println(string(b))    // 一个星期左右    8026938    phone
3年前 评论
codexzy (楼主) 3年前

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!