C#之字符编码
在 Windows Vista 及之后的版本中,每个Unicode字符都使用UTF-16编码,UTF的全称是 Unicode Transformation Format(Unicode 转换格式)。UTF-16将每个字符编码为2个字节(或者说16位)。Windows 之所以使用 UTF-16,是因为全球各地使用的大部分语言中,每个字符很容易用一个16位值来表示。这样一来应用程序很容易遍历字符串并计算出它的长度。但是,16位不足以表示某些语言的所有字符。对于这些语言,UTF-16 支持使用代理(suurrigate),后者是用32位(或者说4个字符)来表示一个字符的一种方式。由于只有少数应用程序需要表示这些语言中的字符,所以 UTF-16 在节省空间和简化编码这两个目标之间,提供了一个很好的折衷。注意,.Net Framework 始终使用 UTF-16来编码所有字符和字符串,所以在我们开发的 Windows 应用程序中,如果需要本机代码(native code)和托管代码之间传递字符或字符串,使用 UTF-16能改进性能和减少内存消耗。
UTF-8 将一些字符编码为1个字节,一些字符编码为2个字节,一些字符编码为3个字节,一些字符编码为4个字节。值在0x0080一下的字符压缩为1个字节,这对美国使用的字符非常合适。0x0080 和0x07FF之间的字符转换为2个字节,这对欧洲和中东地区的语言非常使用。0x0800以上的字符都转换为3个字节,适合东亚地区的语言。最后,代理对(surrogate pair)被写为4个字节。UTF-8 是一种相当流行的编码格式。但在对值为0x0800及以上的大量字符进行编码的时候,不如 UTF-16 高效。
UTF-32 将每个字符都编译为4个字节。如果打算写一个简单的算法来遍历字符(任何语言中使用的字符),但又不想处理字节数不定的字符,这种编码方式就非常有用。例如,如果采用UTF-32 编码方式,就不需要关系代理(surrogate)的问题,因为每个字符都是4个字节。显然,从内存使用的角度来看,UTF-32 并不是一种高效的编码格式。因此在将字符串保存到文件或传到网络的时候,很少会用到这种格式。这种编码格式一般在应用程序内部使用。
为何要用Unicode
Unicode 有利于应用程序本地化。
只用 Unicode ,只需发布一个二进制(.exe或dll)文件,即可支持所有语言。
Unicode 提升了应用程序的效率,因为代码执行速度更快,占用内存更少。 Windows内部的一切工作都是使用 Unicode 字符和 Unicode 字符串来进行的。所以,加入我们坚持传入 ANSI 字符或者字符串,Windows 就会被迫分配内存,并将 ANSI 字符或字符串转换为等价的 Unicode 形式。
使用 Unicode,应用程序能轻松调用所有尚未弃用(nondeprecated)的 Windows 函数,因为一些 Windows 函数提供的版本只能处理 Unicode 字符和字符串。
使用 Unicode,应用程序的代码很容易与 COM 集成(后者要求使用 Unicode 字符和 Unicode 字符串)。
使用 Unicode,应用程序的代码很容易与 .NET Framework 集成(后者要求使用 Unicode 字符和 Unicode 字符串)。
使用 Unicode,能保证应用程序的代码能够轻松操纵我们自己的资源(其中的字符串总是 Unicode 形成的)。
C#之字符编码的更多相关文章
- Python遇到字符编码出问题的一个相对万能的办法
在使用Python做爬虫的过程中,经常遇到字符编码出问题的情况. UnicodeEncodeError: 'ascii' codec can't encode character u'\u6211' ...
- python学习笔记(基础一:'hello world'、变量、字符编码)
第一个python程序: Hello World程序 windows命令行中输入:python,进入python交互器,也可以称为解释器. print("Hello World!" ...
- Python学习Day2笔记(字符编码和函数)
1.字符编码 #ASCII码里只能存英文和特殊字符 不能存中文 存英文占1个字节 8位#中文编码为GBK 操作系统编码也为GBK#为了统一存储中文和英文和其他语言文字出现了万国码Unicode 所有一 ...
- mysql 5.5 修改字符编码
修改/etc/mysql/my.cnf 配置文件: 最后重启mysql 服务,再查看: 编码已经改好了,可以支持中文字符编码了.
- mysql命令行修改字符编码
1.修改数据库字符编码 mysql> alter database mydb character set utf8 ; 2.创建数据库时,指定数据库的字符编码 mysql> create ...
- 关于Unicode,字符集,字符编码,每个程序员都应该知道的事
关于Unicode,字符集,字符编码,每个程序员都应该知道的事 作者:Jack47 李笑来的文章如何判断一个人是否聪明?中提到: 必要.清晰.且准确的概念,是一切思考的基石.所谓思考,很大程度上,就是 ...
- java中文乱码解决之道(二)-----字符编码详解:基础知识 + ASCII + GB**
在上篇博文(java中文乱码解决之道(一)-----认识字符集)中,LZ简单介绍了主流的字符编码,对各种编码都是点到为止,以下LZ将详细阐述字符集.字符编码等基础知识和ASCII.GB的详情. 一.基 ...
- ASP.NET 字符编码的那些事
ASP.NET 中的字符编码问题,一般会有两个场景: HTML 编码:一般是动态显示 HTML 字符或标签,写法是:HttpUtility.HtmlDecode(htmlString) 或 Html. ...
- 【字符编码】Java字符编码详细解答及问题探讨
一.前言 继上一篇写完字节编码内容后,现在分析在Java中各字符编码的问题,并且由这个问题,也引出了一个更有意思的问题,笔者也还没有找到这个问题的答案.也希望各位园友指点指点. 二.Java字符编码 ...
- 【字符编码】字符编码 && Base64编码算法
一.前言 在前面的解决乱码的一文中,只找到了解决办法,但是没有为什么,说白了,就是对编码还是不是太熟悉,编码问题是一个很简单的问题,计算机从业人员应该也必须弄清楚,基于编码的应用有Base64加密算法 ...
随机推荐
- 彻底搞懂MySQL为什么要使用B+树索引
目录 MySQL的存储结构 表存储结构 B+树索引结构 B+树页节点结构 为什么要用B+树索引 二叉树 多叉树 B树 B+树 搞懂这个问题之前,我们首先来看一下,MySQL表的存储结构 MySQL的存 ...
- rac双节点+物理DG
注:以下文章均是看了黄伟老师的视频,记录为博客供以后使用. 双节点RAC搭建: http://blog.csdn.net/imliuqun123/article/details/76171289 RA ...
- 小试牛刀ElasticSearch大数据聚合统计
ElasticSearch相信有不少朋友都了解,即使没有了解过它那相信对ELK也有所认识E即是ElasticSearch.ElasticSearch最开始更多用于检索,作为一搜索的集群产品简单易用绝对 ...
- HTTPS请求HTTP接口被浏览器阻塞,python实现websocket客户端,websocket服务器,跨域问题,dwebsocket,https,拦截,服务端
HTTPS请求HTTP接口被浏览器阻塞,python实现websocket客户端,websocket服务器,跨域问题,dwebsocket,https,拦截,服务端 发表时间:2020-03-05 1 ...
- Django--虛擬環境Virtualenv的安裝使用
Django--虛擬環境Virtualenv的安裝使用 本次隨筆只要記錄在windows下安裝virtualenvwrapper,以及簡單的使用命令. virtualenvwrapper的安裝 ...
- nginx.service: control process exited, code=exited status=1
安装linux的宝塔面板,结果面板显示nginx和php已经运行了,但是机器系统上并没有运行.记录一次nginx报错,操作步骤看下代码: [root@localhost nginx]# systemc ...
- YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsafe. Please read https://msg.pyyaml.org/load for full details. data = yaml.load(file_data)
YAMLLoadWarning: calling yaml.load() without Loader=... is deprecated, as the default Loader is unsa ...
- 阿里云 Redis 开发规范
阿里云Redis开发规范-阿里云开发者社区 https://developer.aliyun.com/article/531067 https://mp.weixin.qq.com/s/UWE1Kx6 ...
- HDFS HBase Solr Which one? 从访问模式角度决策
HDFS 压缩性能最优.扫描速度最快:不支持随机访问,仅支持昂贵.复杂的文件查询 HBase适合随机访问 Solr 适合检索需求 HBase访问单个记录的时间为毫秒级别,而HDFS不支持随机访问. H ...
- Set、Map的区别
应用场景Set用于数据重组,Map用于数据储存Set: (1)成员不能重复(2)只有键值没有键名,类似数组(3)可以遍历,方法有add, delete,hasMap:(1)本质上是健值对的集合,类似集 ...