Go UTF8与GBK转换

1. GBK转UTF8

1.1. 文件树形图

demo
├── gbk.txt
└── text_test.go

1.2. 代码

gbk.txt

注意使用GBK编码

中国

text_test.go

package main

import (
    "bytes"
    "golang.org/x/text/encoding/simplifiedchinese"
    "golang.org/x/text/transform"
    "io/ioutil"
    "testing"
)

func TestGBK(t *testing.T) {
    data, err := ioutil.ReadFile("gbk.txt")
    if err != nil {
        t.Fatal(err)
    }
    // 打印GBK
    t.Log(string(data))

    // GBK转UTF8
    data, err = ioutil.ReadAll(transform.NewReader(bytes.NewBuffer(data), simplifiedchinese.GBK.NewDecoder()))
    if err != nil {
        t.Fatal(err)
    }

    // 打印UTF8
    t.Log(string(data))
}

1.3. 测试

=== RUN   TestGBK
    text_test.go:17: �й�
    text_test.go:26: 中国
--- PASS: TestGBK (0.00s)
PASS

2. UTF8转GBK

2.1. 文件树形图

demo
├── utf8.txt
└── text_test.go

2.2. 代码

utf8.txt

注意使用utf8编码

中国

text_test.go

package main

import (
    "bytes"
    "golang.org/x/text/encoding/simplifiedchinese"
    "golang.org/x/text/transform"
    "io/ioutil"
    "testing"
)

func TestUTF8(t *testing.T) {
    data, err := ioutil.ReadFile("utf8.txt")
    if err != nil {
        t.Fatal(err)
    }
    // 打印UTF8
    t.Log(string(data))

    // UTF8转GBK
    data, err = ioutil.ReadAll(transform.NewReader(bytes.NewBuffer(data), simplifiedchinese.GBK.NewEncoder()))
    if err != nil {
        t.Fatal(err)
    }

    // 打印GBK
    t.Log(string(data))
}

2.3. 测试

=== RUN   TestUTF8
    text_test.go:17: 中国
    text_test.go:26: �й�
--- PASS: TestUTF8 (0.00s)
PASS

3. 参考

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 2
    评论
UTF-8GBK是两种不同的字符编码方式,UTF-8是一种变长编码,而GBK是一种固定长度编码。在C语言中,可以通过使用相关库函数来实现UTF-8GBK转换。 首先,要将UTF-8编码的字符转换GBK编码的字符,可以使用iconv函数。iconv函数是一个在C语言中进行字符集转换的库函数,它可以将一个字符由一种编码方式转换为另一种编码方式。首先,需要先使用iconv_open函数来打开一个转换句柄,将源字符串的编码方式指定为UTF-8,目标字符串的编码方式指定为GBK。然后,使用iconv函数将源字符串转换为目标字符串。 示例代码如下: ```c #include <iconv.h> #include <stdio.h> #include <stdlib.h> #include <string.h> int main() { char *source = "UTF-8编码的字符串"; char *target = malloc(sizeof(char) * (strlen(source) + 1)); // 打开转换句柄 iconv_t conv = iconv_open("GBK", "UTF-8"); if (conv == (iconv_t)(-1)) { perror("转换句柄打开失败"); exit(1); } // 进行转换 size_t inBytes = strlen(source); size_t outBytes = strlen(source) + 1; size_t ret = iconv(conv, &source, &inBytes, &target, &outBytes); if (ret == (size_t)(-1)) { perror("转换失败"); exit(1); } // 关闭转换句柄 iconv_close(conv); printf("GBK编码的字符串:%s\n", target); free(target); return 0; } ``` 同样地,要将GBK编码的字符转换UTF-8编码的字符,只需要将上述示例代码中的源编码和目标编码对调即可。 以上就是在C语言中如何进行UTF-8GBK编码转换的简要说明。通过使用iconv函数,我们可以在C语言中轻松实现这两种编码方式之间的转换
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

yimtcode

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值