- 浏览: 209995 次
- 性别:
- 来自: 深圳
文章分类
- 全部博客 (391)
- java (18)
- python (3)
- ruby (4)
- linux (48)
- 网络 (9)
- 前端 (2)
- 社会、文化、哲学、人生、百态 (0)
- 工具 (10)
- 下载 (0)
- 常用地址 (0)
- tracert (0)
- mysql (8)
- 开源相关收藏 (1)
- 模块查看依懒 (1)
- watch使用 (1)
- Tcpdump (2)
- easy_install安装 (1)
- 构造redis批量删除脚本 (1)
- MYSQL 性能测试 (1)
- JAVA code encode utf-8 (1)
- linux nginx awk 实时 每妙 (1)
- mkpasswd (1)
- spring security oauth (1)
- jmap dump java memory Analyzer (1)
- JAVA DUMP (1)
- swap linux 过高 解决 (1)
- SWAP (1)
- jmap jstat jstack dump (1)
- java jconsole 的使用 (1)
- git 常用 (1)
- MYSQL 索引 动态 唯一 (1)
- TCP 三次握手 四次挥手 (1)
- linux date (1)
- 删除 空行 注释行 (1)
- maven3 yum linux install repository (1)
- linux git 搭建 (1)
- linux sar eth1 查看 流量 (1)
- sar (1)
- netstat ip 过滤 常用脚本 (1)
- Tcpdump 包分析网络连接过程 (1)
- net ipv4 tcp time wait tw recycle (0)
- /etc/sysctl.conf linux 网络 配置 (1)
- ss 网络连接查看 (比netstat 快很多,实时性牺牲) (1)
- MYSQL 关键字 (1)
- Linux 下多核CPU知识 (1)
- top (1)
- 令牌 证书 (1)
- mysql unix timestamp (1)
- 端口扫描 nc nmap (1)
- 204 http code 状态码 (1)
- ss -s ss -l (1)
- linux 常用 curl (1)
- linux sed 替换 换行 (1)
- centos yum install rpm install (1)
- spring-mvc源码解读 (1)
- 使用iftop查看实时的网络流量 (0)
- linux 命令 expect (1)
- HTTP (1)
- openssl ddif 加密 (1)
- iptables 详解 (1)
- python 虚拟化 VirtualEnv virtualenvwrapper (1)
- nginx (2)
- more less 实用技巧 (1)
- linux nginx (2)
- linux curl https ssl 证书 ca (1)
- openssl (1)
- php mysql linux (1)
- linux 虚拟机 虚拟 xen (0)
- linux 虚拟机 虚拟 xen kvm (1)
- linux perl 单行执行技巧 (1)
- mysql 查看库占用空间 表查用空间 (1)
- linux tcpdump (1)
- maven (1)
- sun.misc.Unsafe (1)
- OpenSSL生成证书 (1)
- http://blog.csdn.net/zzulp/article/details/8018751 (1)
- maven 本地 jar dependency (1)
- 计算JAVA代码行数最简单命令 sed (1)
- 常用的证书格式转换 rsa eg (1)
- 加密 解密 签名 (1)
- 分析jar包冲突 (1)
- 使用JMockit编写java单元测试 (1)
- Linux 技巧:让进程在后台可靠运行的几种方法 (1)
- 环境变量控制 (1)
- 5+ 个 tar 命令的用法,附示例 (1)
- scp自动输入密码 (1)
- ps axo pid (1)
- ppid (1)
- comm (1)
- pmem (1)
- lstart|grep mysql (0)
- lstart (1)
- etime|grep mysql (1)
- UML类图字少好理解 (1)
- HTTP经典文章 (1)
- git (1)
- Git常用命令 (1)
- LINUX 系统被攻击的分析过程 (1)
- NIO (1)
- LINUX 操作快捷键使用 (1)
- openSSL命令、PKI、CA、SSL证书原理 (1)
- shell (2)
- 转载 (1)
- mysqldump 可以直接dump->xml (1)
- VIM比较全面的文章 (1)
- eclipse regex 正则表达式 (1)
- synchronized (1)
- 锁 (1)
- java 正则表达式 regex (1)
- Reference Queue 引用 源码 (1)
- spring aop 源码 分析 (1)
- java @Cache @Transaction 注解 (1)
- spring aop (1)
- spring jdk proxy cglib 动态代理 性能比较 (1)
- spring proxy private public 代理限制 (1)
- spring transaction aop 事务 (1)
- spring autowire 注解注入 (1)
- 桥接 NAT NAT地址转换 内部网络 虚拟网络 (1)
- spring-web-mvc 源码解读 之 RequestMappingHandlerMapping (1)
- find atime mtime ctime -n n +n (1)
- android studio 快捷键初探 (1)
- android 源码阅读的计划 (1)
- 计算机网络学习-VLAN (1)
- sed 高级 合并行 (1)
- CAP 一致性 可用性 分布式容错性 (1)
- android lib so 库文件 (0)
- android lib so 库文件 移植 (1)
- android 不错的博文 (1)
- sourceinsight 源码 阅读 (1)
- Android Tab UI (1)
- 诗 (1)
- mysql 批处理 (0)
- netty 堆外内存 DirectByteBuffer (1)
- netty 并发 百万 推送 (1)
- Linux操作系统中内存buffer和cache的区别 (1)
- maven intellij target bytecode version (1)
- linux sleep()的实现原理 (1)
- android (2)
- javadoc 代码注释规范 (1)
- spring 自动注入bean auto (1)
- Photoshop CS6常用快捷键 (1)
- 股票 数据 机器 分析 (1)
- 批处理 (1)
- mysql -e (1)
- char (1)
- Unicode (1)
- 编码 (1)
- utf8 (1)
- utf-8 (1)
- utf16 (1)
- utf-16 (1)
- IntelliJ IDEA (1)
- ide (1)
- idea (1)
- intellij (1)
- 文件 (1)
- 目录 (1)
- 源代码 (1)
- CountDownLatch (1)
- CyclicBarrier (1)
- Semaphore (1)
- spring (1)
- linux 查看不同进制文件 (1)
- WebMvcConfigurationSupport (1)
- sdkman工具的使用 (1)
- http header (1)
- LINUX系统优化 (1)
最新评论
-
gelongmei:
威武我大酒神
shell脚本不换行刷新数据
char类型与Unicode编码
Unicode(UTF-8, UTF-16)令人混淆的概念
Java的char型是非常独特的,占用两个字节,因为Java中char型采用了Unicode编码。
要理解这个问题,我们必须要理解什么是Unicode。
世界上存在着多种编码方式,同一个二进制数字可以被解释成不同的符号。因此,要想打开一个文本文件,就必须知道它的编码方式,否则用错误的编码方式解读,就会出现乱码。为什么电子邮件常常出现乱码?就是因为发信人和收信人使用的编码方式不一样。可以想象,如果有一种编码,将世界上所有的符号都纳入其中。每一个符号都给予一个独一无二的编码,那么乱码问题就会消失。
Unicode的学名是"Universal Multiple-Octet Coded Character Set",简称为UCS。UCS可以看作是"Unicode Character Set"的缩写。与ASC2和ISO-8859-1类似,Unicode是一种编码方式,但是它所包括字符的范围却与之前的所有编码方式有着天壤之别。Unicode是一个囊括了几乎世界上所有文字的字符编码表。它的目标是任何文字都可以在其中找到唯一的编码,例如0041表示了字符A,比如,U+0639表示阿拉伯字母Ain,U+0041表示英语的大写字母A,U+4E25表示汉字“严”。它所要解决的主要问题是:不同语言和地区之间字符编码转换的问题,如果
采用了Unicode编码的话则不需要在不同的字符集之间切换,因为都包括在Unicode当中。
Unicode 的实现方式不同于编码方式。一个字符的 Unicode 编码是确定的。但是在实际传输过程中,由于不同系统平台的设计不一定一致,以及出于节省空间的目的,对 Unicode 编码的实现方式有所不同,具体由UTF(UCS Transformation Format)规范规定,常见的UTF规范包括UTF-8、UTF-16、UTF-32。
Java语言中char类型采用UTF-16编码格式。
从JDK1.5开始,代码点(code point)是指与一个编码表中某个字符对应的代码值。在Unicode标准中,代码点采用16进制数写,并加上前缀U+,例如U+0041就是字母A的代码点。Unicode代码点可以分成17个代码级别(code plane)。第一个代码级别称为基本的多语言级别(basic multilingual plane),代码点从U+0000到U+FFFF,其中包括了经典的Uncode代码;其余16个附加级别,代码点从U+10000带U+10FFFF,其中包括了一些辅助字符(supplementary character)。
UTF-16它采用不同长度的编码表示所有的Unicode代码点(是一种变长的编码方式)。在基本的多语言级别中,每个字符用16位表示,通常被称为代码单元(code unit);而辅助字符采用一对连续的代码单元惊醒编码。这样构成的代码值一定落入基本的多语言级别中空闲的2048字节内,通常被称为替代区域(surrogate area)(U+D800到U+DBFF用于第一个代码单元,U+DC00到U+DFFF用于第二个代码单元)。这种设计十分巧妙,我们可以从中迅速的知道一个代码单元是一个字符编码,还是一个辅助字符的第一或第二部分。
强烈建议不要再程序中使用char类型,除非确实需要对UTF-16代码单元进行操作。最好将需要处理的字符串用抽象数据类型表示。可以采用转义序列符/u表示Unicode代码单元。(为什么呢?)
写了段代码,从中可以可以基本理解Java的char、Unicode、代码点和代码单元的概念了,详见 Java中的基础类型,用二进制表示数字
Unicode(UTF-8, UTF-16)令人混淆的概念
Java的char型是非常独特的,占用两个字节,因为Java中char型采用了Unicode编码。
要理解这个问题,我们必须要理解什么是Unicode。
世界上存在着多种编码方式,同一个二进制数字可以被解释成不同的符号。因此,要想打开一个文本文件,就必须知道它的编码方式,否则用错误的编码方式解读,就会出现乱码。为什么电子邮件常常出现乱码?就是因为发信人和收信人使用的编码方式不一样。可以想象,如果有一种编码,将世界上所有的符号都纳入其中。每一个符号都给予一个独一无二的编码,那么乱码问题就会消失。
Unicode的学名是"Universal Multiple-Octet Coded Character Set",简称为UCS。UCS可以看作是"Unicode Character Set"的缩写。与ASC2和ISO-8859-1类似,Unicode是一种编码方式,但是它所包括字符的范围却与之前的所有编码方式有着天壤之别。Unicode是一个囊括了几乎世界上所有文字的字符编码表。它的目标是任何文字都可以在其中找到唯一的编码,例如0041表示了字符A,比如,U+0639表示阿拉伯字母Ain,U+0041表示英语的大写字母A,U+4E25表示汉字“严”。它所要解决的主要问题是:不同语言和地区之间字符编码转换的问题,如果
采用了Unicode编码的话则不需要在不同的字符集之间切换,因为都包括在Unicode当中。
Unicode 的实现方式不同于编码方式。一个字符的 Unicode 编码是确定的。但是在实际传输过程中,由于不同系统平台的设计不一定一致,以及出于节省空间的目的,对 Unicode 编码的实现方式有所不同,具体由UTF(UCS Transformation Format)规范规定,常见的UTF规范包括UTF-8、UTF-16、UTF-32。
Java语言中char类型采用UTF-16编码格式。
从JDK1.5开始,代码点(code point)是指与一个编码表中某个字符对应的代码值。在Unicode标准中,代码点采用16进制数写,并加上前缀U+,例如U+0041就是字母A的代码点。Unicode代码点可以分成17个代码级别(code plane)。第一个代码级别称为基本的多语言级别(basic multilingual plane),代码点从U+0000到U+FFFF,其中包括了经典的Uncode代码;其余16个附加级别,代码点从U+10000带U+10FFFF,其中包括了一些辅助字符(supplementary character)。
UTF-16它采用不同长度的编码表示所有的Unicode代码点(是一种变长的编码方式)。在基本的多语言级别中,每个字符用16位表示,通常被称为代码单元(code unit);而辅助字符采用一对连续的代码单元惊醒编码。这样构成的代码值一定落入基本的多语言级别中空闲的2048字节内,通常被称为替代区域(surrogate area)(U+D800到U+DBFF用于第一个代码单元,U+DC00到U+DFFF用于第二个代码单元)。这种设计十分巧妙,我们可以从中迅速的知道一个代码单元是一个字符编码,还是一个辅助字符的第一或第二部分。
强烈建议不要再程序中使用char类型,除非确实需要对UTF-16代码单元进行操作。最好将需要处理的字符串用抽象数据类型表示。可以采用转义序列符/u表示Unicode代码单元。(为什么呢?)
写了段代码,从中可以可以基本理解Java的char、Unicode、代码点和代码单元的概念了,详见 Java中的基础类型,用二进制表示数字
发表评论
-
代码沉淀
2018-01-17 10:08 5501、如果一个代码片段是抽象的,那意味着它是可以有多种实现的,那 ... -
java.nio.file.StandardOpenOption
2018-01-04 11:19 847java.nio.file.StandardOpenOptio ... -
javadoc 规范
2017-03-06 13:12 501http://www.cnblogs.com/felix-/ ... -
Java Socket 几个重要的TCP/IP选项解析
2015-12-15 17:02 527http://elf8848.iteye.com/blog/1 ... -
ReentrantLock可重入锁的使用场景
2015-05-05 13:45 569JAVA锁 从使用场景的角度出发来介绍对ReentrantLo ... -
Java ClassLoader详解
2015-04-07 16:27 495http://xjtom78.iteye.com/blog/8 ... -
sun.misc.Unsafe
2015-03-02 16:38 420http://www.cnblogs.com/tianchi/ ... -
JVM参数设置、分析
2014-12-01 19:11 0转自http://itlab.idcquan.com/Java ... -
java原生工具常用命令
2014-10-09 14:59 411jmap -histo pid [实体化情况] jstat ... -
jstat 详细使用
2014-07-16 10:01 643jstat分析VM内存 from:ht ... -
JavaWeb的各种中文乱码终极解决方法
2014-06-12 17:16 522一、Servlet输出乱码 1. 用servlet.getOu ... -
scala环境
2014-06-10 19:05 468http://download.scala-ide.org/e ... -
sonar忽略
2014-06-10 16:54 1156<properties> <aider. ... -
java AES 命令行 报错处理
2014-04-01 11:24 565java.security.NoSuchAlgorithmEx ... -
JVM内核参数说明
2014-03-12 02:14 549java虽然是自动回收内存,但是应用程序,尤其服务器程序最好根 ... -
jmap常用
2014-02-14 17:02 428SYNOPSIS jmap [ option ] pid ... -
JAVA GC详细说明
2014-01-06 13:54 4211.java中GC 即垃圾收集机制是指jvm用于释放那 ... -
JAVA中的GC
2014-01-03 20:34 01.java中GC 即垃圾收集机制是指jvm用于释放那 ... -
JAVA GC详细说明
2014-01-03 20:32 0http://www.360doc.com/content/1 ... -
分析包冲突命令
2013-12-31 16:43 412分析jar包冲突 ls|awk '{a=system(&quo ...
相关推荐
在C++编程中,特别是在MFC(Microsoft Foundation Classes)库中,`CString`、`TCHAR`和`CHAR`类型扮演着关键的角色,它们之间的转换是解决UNICODE和非UNICODE兼容问题的关键。 `CString`是MFC库提供的一种字符串类...
Unicode码,全称为统一码或万国码,是一种在计算机科学领域广泛使用的字符编码标准,旨在为世界上所有的字符提供一个唯一的、统一的数字表示。Unicode的出现解决了早期各种字符编码系统(如ASCII、GB2312等)无法...
总的来说,C语言实现数字到Unicode码的转换涉及对Unicode编码的理解、选择合适的编码方案以及可能需要的字节顺序处理。在处理Unicode时,应确保充分理解其工作原理,以便编写出正确且高效的应用程序。
Unicode码生成器是一种工具,主要用于将输入的字符或字符串转换成其对应的Unicode编码。Unicode是一种国际标准,旨在统一世界上所有语言的文字表示,包括字母、数字、标点符号等。它使用一个唯一的数字来代表每一个...
C++类型转换(char* string cstring unicode ansi 等等)转换 C++类型转换是指在C++编程语言中,各种类型之间的转换操作。这种转换操作包括基本类型之间的转换、字符串类型之间的转换、字符类型之间的转换等等。在...
本文将详细讨论如何在VB6.0中实现Unicode码与汉字的互转,以及如何处理混合编码的转换。 首先,我们需要理解Unicode的基本概念。Unicode是一个国际标准,为每个字符分配一个唯一的数字,不论这个字符属于哪种语言。...
在C++11标准中,Unicode编码转换是一个重要的更新,主要涉及了新的数据类型和字符串定义方式,以解决跨平台的Unicode字符处理问题。这里详细解释一下这些知识点: 1. **char16_t 和 char32_t 类型**: 在C++98之前...
在Java中,`char`类型用于表示单个字符,它的范围是从U+0000到U+FFFF,涵盖了基本多文种平面(BMP)的Unicode码点。对于超出这个范围的码点,Java使用代理对(surrogate pairs)来表示,这是两个`char`值的组合,...
在JavaScript中,...总结,通过JavaScript,我们可以方便地实现汉字与Unicode编码之间的转换,这在处理多语言文本和特殊字符时尤其重要。了解并熟练运用这些技巧,对于提升JavaScript编程的效率和灵活性大有裨益。
在给定的文件中,虽然部分内容难以直接解析为明确的IT知识,但通过其标题“常用的java汉字unicode编码”以及描述“该文档有常用的java汉字unicode编码”,我们可以深入探讨与之相关的知识点。 ### Unicode编码的...
在Java中,Unicode编码主要通过字符串对象的`char`类型来实现。每个`char`变量可以存储一个Unicode码点,但需要注意的是,对于超出BMP范围的字符,Java使用代理对(Surrogate Pair)来存储。一个代理对由两个`char`...
// unicode: 返回一个字符的...// 码值与ascii码相同。因此本函数也可以用作不严格地判断一个字 // 符是半角还是全角。当返回值小于256时,char为半角字符,否则 // char为全角字符。 // sylens@smth, 2004/12/06
Unicode编码方案中,每个汉字都有一个固定的码点(Code Point),这使得不同地区的字符能够统一表示,避免了编码冲突问题。C#中的字符串类型`string`默认采用UTF-16编码,这是Unicode的一个实现,它可以表示所有的...
对于Unicode字符集,`char`类型也可以扩展到更大的范围,但具体取决于编译器和平台的实现。`char`类型在编程中有着广泛的应用,例如,它可以用来处理字符串、读写文本文件、进行字符操作等。 描述中提到的博客链接...
在Java和C#中,`char`可以表示一个Unicode码点,但在C++中,`char`通常只能表示ASCII,处理Unicode可能需要使用`wchar_t`或`std::u16string`等宽字符类型。 3. **转换函数** - 在编程中,有各种函数用于在字符和...
本文主要介绍在Unicode环境下,如何在CString与char*之间进行转换。 首先,我们来看Unicode下的CString转换为char*的方法: 1. 使用API `WideCharToMultiByte` 进行转换: ```cpp CString str = _T("D://校内...
在描述中提到的“Unicode下CString与char_转换”,意味着我们要讨论在Unicode环境下,如何将`CString`对象转换成`char*`数组,这通常涉及到字符编码的转换。`CString`对象可以方便地存储Unicode字符串,但当我们需要...
- `int unicode_to_utf8(const wchar_t* unicode_buffer, int unicode_len, char* utf8_buffer, int utf8_len)`:将宽字符(Unicode)转换为UTF-8编码。 在实际应用中,转码表通常是预先计算好的,可以以数组的形式...
#### 编制0-255之间的Unicode编码表 这个任务要求使用循环遍历0到255之间的每一个整数,并将这些整数转换为对应的Unicode字符。这可以通过使用`char`类型实现: ```java for (int i = 0; i ; i++) { System.out....
- 使用`Char.ConvertToUtf32`方法获取指定索引位置的字符的Unicode编码。 5. **字符判断**: - 通过比较字符的Unicode编码值是否位于定义的中文字符范围内来判断该字符是否为中文字符。 #### 使用场景 这种方法...