stringbuffer - 一门语言在实现 String 和 Binary 两种类型时, 他们的数据结构差异性在哪里?

查看:118
本文介绍了stringbuffer - 一门语言在实现 String 和 Binary 两种类型时, 他们的数据结构差异性在哪里?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

string 是我们非常常用的基础数据类型,binary 也是时长用到。它们的差异性有时候让人有点摸不着头脑

  • 一个仅包含ascii字符的简单字符串:"hello",对应的十六进制编码是 68 65 6c 6c 6f,它作为 string 保存和作为 binary 保存会有差异吗?

  • 对于包含类似 UTF-8 编码的多字节字符的字符串:"你好",对应的十六进制编码是 e4 bd a0 e5 a5 bd,转化为binary时,会有字节序等影响吗?

解决方案

字符串在软件内部的表示取决于内部实现。比如 Windows NT、Java 内部使用 UTF-16LE 编码保存字符串,C(wchar*)使用两字节或者四字节编码,Python 2 (unicode 类型)至 3.2 依编译时选项使用两字节或者四字节编码,Python 3.3 以后依字符串内容使用单字节、两字节或者四字节编码,Go 和 Rust 使用 UTF-8 编码。MySQL 有两种字符串编码:「utf8」使用三字节编码,「utf8mb」使用四字节编码。

字符串并不能直接「作为」二进制保存;你(或者你所使用的软件)必须将其进行编码。上边我已经讨论了内部在内存中的编码表示。如果要存储到文件,或者通过网络传输,需要使用者(做这件事的人)指定编码,或者采用默认编码的。

ASCII、Latin-x、UTF-8 编码是字节序无关的(前两类是单字节编码)。GB18030 和 UTF-16、UTF-32 是字节序相关的。

这篇关于stringbuffer - 一门语言在实现 String 和 Binary 两种类型时, 他们的数据结构差异性在哪里?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆