go基础库之读/写不同的字符集

栏目: Go · 发布时间: 7年前

内容简介:不同的输入源可以使用不同的字符集,用Go开发的应用中也不例外。现在许多用户都使用的Windows系统,当然也有其他的系统。默认情况下,Go希望程序中使用的字符编码都为UTF-8。如果不是,则必须对给定的字符集进行解码,以便能够正确处理字符串。本文将介绍非UTF-8的字符集如何进行文件读写。

不同的输入源可以使用不同的字符集,用 Go 开发的应用中也不例外。现在许多用户都使用的Windows系统,当然也有其他的系统。默认情况下,Go希望程序中使用的字符编码都为UTF-8。如果不是,则必须对给定的字符集进行解码,以便能够正确处理字符串。本文将介绍非UTF-8的字符集如何进行文件读写。

读/写不同的字符集

Golang 版本

1.12.1

前言

不同的输入源可以使用不同的字符集,用Go开发的应用中也不例外。现在许多用户都使用的Windows系统,当然也有其他的系统。默认情况下,Go希望程序中使用的字符编码都为UTF-8。如果不是,则必须对给定的字符集进行解码,以便能够正确处理字符串。本文将介绍非UTF-8的字符集如何进行文件读写。

实现

package main

import (
	"fmt"
	"golang.org/x/text/encoding/charmap"
	"io/ioutil"
	"os"
)

func main() {

	// 将字符串编码为Windows-1252并写入文件
	encoder := charmap.Windows1252.NewEncoder()
	s, e := encoder.String("This is sample text with runes Š")
	if e != nil {
		panic(e)
	}
	ioutil.WriteFile("example.txt", []byte(s), os.ModePerm)

	// 解码为UTF-8
	f, e := os.Open("example.txt")
	if e != nil {
		panic(e)
	}
	defer f.Close()
	decoder := charmap.Windows1252.NewDecoder()
	reader := decoder.Reader(f)
	b, err := ioutil.ReadAll(reader)
	if err != nil {
		panic(err)
	}
	fmt.Println(string(b))
}
$ go run main.go
This is sample text with runes Š

原理

golang.org/x/text/encoding/charmap 包中包含广泛使用的字符集的 Charmap 类型指针常量。 Charmap 类型提供了为给定字符集创建编码器和解码器的方法。 Encoder 创建编码 Writer ,它将写入的字节编码到所选的字符集。 类似地, Decoder 可以创建解码 Reader ,其将读取到的所有数据解码到所选的字符集。


以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,也希望大家多多支持 码农网

查看所有标签

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Android 源码设计模式解析与实战

Android 源码设计模式解析与实战

何红辉、关爱民 / 人民邮电出版社 / 2015-11 / 79.00元

本书专门介绍Android源代码的设计模式,共26章,主要讲解面向对象的六大原则、主流的设计模式以及MVC和MVP模式。主要内容为:优化代码的首步、开闭原则、里氏替换原则、依赖倒置原则、接口隔离原则、迪米特原则、单例模式、Builder模式、原型模式、工厂方法模式、抽象工厂模式、策略模式、状态模式、责任链模式、解释器模式、命令模式、观察者模式、备忘录模式、迭代器模式、模板方法模式、访问者模式、中介......一起来看看 《Android 源码设计模式解析与实战》 这本书的介绍吧!

HTML 编码/解码
HTML 编码/解码

HTML 编码/解码

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

HEX CMYK 转换工具
HEX CMYK 转换工具

HEX CMYK 互转工具