首页 > 其他分享 >go 语言unicode/utf8包

go 语言unicode/utf8包

时间:2023-01-17 12:44:31浏览次数:63  
标签:编码 UTF unicode 字符 utf8 Go Unicode go 字节

参考:模块三 GO语言实战与应用-unicode与字符编码 - lvp - 博客园 (cnblogs.com)

Go 语言字符编码基础

  Go 语言中的标识符可以包含“任何 Unicode 编码可以表示的字母字符”。虽然可以直接把一个整数值转换为一个string类型的值。但是,被转换的整数值应该可以代表一个有效的 Unicode 代码点,否则转换的结果就将会是"�",即:一个仅由高亮的问号组成的字符串值。

  另外,当一个string类型的值被转换为[]rune类型值的时候,其中的字符串会被拆分成一个一个的 Unicode 字符。

  显然,Go 语言采用的字符编码方案从属于 Unicode 编码规范。更确切地说,Go 语言的代码正是由 Unicode 字符组成的。Go 语言的所有源代码,都必须按照 Unicode 编码规范中的 UTF-8 编码格式进行编码。换句话说,Go 语言的源码文件必须使用。

  Unicode 编码规范提供了三种不同的编码格式,即:UTF-8、UTF-16 和 UTF-32。其中的 UTF 是 UCS Transformation Format 的缩写。而 UCS 又是 Universal Character Set 的缩写,但也可以代表 Unicode Character Set。所以,UTF 也可以被翻译为 Unicode 转换格式。它代表的是字符与字节序列之间的转换方式。在这几种编码格式的名称中,“-”右边的整数的含义是,以多少个比特位作为一个编码单元。以 UTF-8 为例,它会以 8 个比特,也就是一个字节,作为一个编码单元。并且,它与标准的 ASCII 编码是完全兼容的。也就是说,在[0x00, 0x7F]的范围内,这两种编码表示的字符都是相同的。这也是 UTF-8 编码格式的一个巨大优势。UTF-8 是一种可变宽的编码方案。换句话说,它会用一个或多个字节的二进制数来表示某个字符,最多使用四个字节。比如,对于一个英文字符,它仅用一个字节的二进制数就可以表示,而对于一个中文字符,它需要使用三个字节才能够表示。不论怎样,一个受支持的字符总是可以由 UTF-8 编码为一个字节序列。以下会简称后者为 UTF-8 编码值。

一个string类型的值在底层是怎样被表达的?

  是在底层,一个string类型的值是由一系列相对应的 Unicode 代码点的 UTF-8 编码值来表达的。

在 Go 语言中,一个string类型的值既可以被拆分为一个包含多个字符的序列,也可以被拆分为一个包含多个字节的序列。前者可以由一个以rune为元素类型的切片来表示,而后者则可以由一个以byte为元素类型的切片代表。rune是 Go 语言特有的一个基本数据类型,它的一个值就代表一个字符,即:一个 Unicode 字符。比如,'G'、'o'、'爱'、'好'、'者'代表的就都是一个 Unicode 字符。我们已经知道,UTF-8 编码方案会把一个 Unicode 字符编码为一个长度在[1, 4]范围内的字节序列。所以,一个rune类型的值也可以由一个或多个字节来代表。

type rune = int32

 

标签:编码,UTF,unicode,字符,utf8,Go,Unicode,go,字节
From: https://www.cnblogs.com/dadishi/p/17057549.html

相关文章

  • go map
    转载:Go基础系列:9.内置集合-map-知乎(zhihu.com)学到什么什么是map?如何创建map?判断键是否存在?如何获取map长度?如何遍历map?如何删除键/值对?map是引用类......
  • go切片与数组
    转载:Go基础系列:7.内置集合-数组-知乎(zhihu.com)学到什么什么是数组?如何获取数组长度?如何操作数组元素?如何比较两个数组?如何拷贝数组?如何创建多维数组?如何......
  • Golang 跨平台编译
    CGO是什么cgo是在Android和iOS上运行Go程序的关键,它允许GO程序与C语言库相互操作未用到CGO的时候,建议编译的时候禁用CGO,比如编译ARM架构的时候就需要打开该选项......
  • 03-Django命令 python manage.py runserver
    使用Django开发,一定离不开这条命令,pythonmanage.pyrunserver[127.0.0.1:8000],这条命令是启动DJango,接下来就可以通过浏览器发起请求了。Django肯定也会遵守WSGI协议......
  • Golang如何实现节假日不打扰用户?
    ​1、场景想象下以下场景,嘿嘿...!一个iphone用户,闹钟是可以按节假日不响的!每日新闻机器人,节假日是可以不打扰我的!我的业务,节假日是可以...2、思路要实现识别节假日......
  • (13)go-micro微服务公用函数开发
    目录一前言二SwapTo通过jsontag进行结构体赋值三UserForResponse类型转化四最后一前言在utils目录中新建一个swap.go文件swap.go中主要存放一些可以使用到......
  • c++ UTF8-GBK互转
    inlinestd::stringutf8_to_gbk(conststd::string&str){std::wstring_convert<std::codecvt_utf8<wchar_t>>conv;std::wstringtmp_wstr=conv.from_byte......
  • golang: os.open函数
    Open函数/*类似c里的fopen函数返回一个file的指针传入参数文件名(路径)*/funcOpen(namestring)(*File,error){/*调用OpenFile函数,传......
  • Go语言template相关知识
    templeate三板斧创建模版:模版文件以.tmpl结尾,文件的语法和html相同。解析模版t,err:=template.ParseFile("./filename.tmpl")iferr!=nil{ //错误处理......
  • golang:osd.read函数
    函数原型func(f*File)Read(b[]byte)(nint,errerror){//传入b一段内存Buff//检测file是否为空,为空则返回 iferr:=f.checkValid("read"......