1
先UTF-16BE (big endian), 好理解的, 俗称大头

比如说char 'a', ascii为

0x61, 那么它的utf-8, 则为 [0x61], 但utf-1616位的, 所以为[0x00, 0x61]

再说UTF-16LE(little endian), 俗称小头, 这个是比较常用的

还是char 'a', 它的代码却反过来: [0x61, 0x00], 据说是为了提高速度而迎合CPU的胃口, CPU就是这到倒着吃数据的, 这里面有汇编的知识, 不多说

然后说UTF-16, 要从代码里自动判断一个文件到底是UTF-16LE还是BE, 对于单纯的英文字符来说还比较好办, 但要有特殊字符, 图形符号, 汉字, 法文, 俄语, 火星语之类的话, 相信各位都很头痛吧, 所以, unicode组织引入了BOM的概念, 即byte order mark, 顾名思义, 就是表名这个文件到底是LE还是BE的,

其方法就是, 在UTF-16文件的头2个字节里做个标记: LE [0xFF, 0xFE], BE [0xFE, 0xFF]-

下面是更多关于le16的问答

最佳贡献者
2
编码长方式不同。

UTF-16BE: 16 位 UCS 转换格式,Big Endian(最低存放高位字节,符合人们的阅读)字节顺序

UTF-16LE: 16 位 UCS 转换格式,Little-endian(最高地址存放高位)字节顺序
3

一丶 不同的含义

1. Utf-8:将Unicode字符集象代码位映射为8整数(即代码位)数据存储或传输的序列。

2. Utf-16: Unicode字符集的代码位被映射到一个16位长整数序列(即代码位),用于数据存储或传输。

二丶不同的编码规则

1. Utf-8:如果只有一个字节,则最高的二进制位为0;如果是多字节,第一个字节从最高位开始,值为1的连续二进制位的数量决定了编码的字节数,其余的字节都从10开始。

2. Utf-16:正在使用大尾序列和小尾序列的存储。在Macintosh中生成或存储的文本采用大端格式,而在Microsoft或Linux中生成或存储的文本采用小端格式。

三丶优点和缺点是不同的

1. Utf-8:可以通过掩蔽位和移位操作快速读写。在比较字符串时,STRCMP()和WCSCMP()返回相同的结果,从而简化了排序。

2. Utf-16:大多数字符以固定长度的字节(2字节)存储,但Utf-16与ASCII编码不兼容。

本回答被网友采纳

4
编码就是用什么样的编码对你的代行编码,假如你用的本,当你保存时你可以看面可以选择编码,假如你选择了utf-8,这时就用utf-8对你的代码进行编码,下次当你用gbk或者其他的编码进行打开(解码)时就会出现乱码,在eclipse或者myeclipse中,可以再工程上右键,选择properties,然后可以看到第一个resource里面的inherited

from

container,或者选择other可以选择你代码的编码和解码,先说这么多吧,希望可以帮到你
5
用四个字节表示一个字符 追问
它的一个代码单元是多少字节
6
我是搞手机软件的,没有GB2312确实没法看电子书,只有把机器拿到售后去重新升级一下软件版本。(一定要问售后是否新软件版本添加了GB2312,要不升级也没用)
7
ansi表示的是本地。

在中文window中,你用记建一个件后,直接保存,此时是以本地编码(也即GBK),一般ansi为GBK(GB2312)编码。

所以如果你再进行转码,只会更乱。

java的转码代码:

new String(string.getBytes("UTF-8"),"GBK"); 追问
关键我是要和动态库调用的接口的编码一致,接口的编码为ansi,你说的那种方法我试过了,不行
追答
这个是百度百科对ANSI编码的解释:

不同的国家和地区制定了不同的标准,由此产生了 GB2312, BIG5, JIS 等各自的编码标准。这些使用 2 个字节来代表一个字符的各种汉字延伸编码方式,称为 ANSI 编码。在简体中文系统下,ANSI 编码代表 GB2312 编码,在日文操作系统下,ANSI 编码代表 JIS 编码。 不同 ANSI 编码之间互不兼容,当信息在国际间交流时,无法将属于两种语言的文字,存储在同一段 ANSI 编码的文本中。 当然对于ANSI编码而言,0x00~0x7F之间的字符,依旧是1个字节代表1个字符。这一点是ASNI编码与Unicode编码之间最大也最明显的区别。

而java获取本地编码的方式是: System.getProperty("file.encoding")
本回答被提问者和网友采纳

你的回答

单击“发布您的答案”,即表示您同意我们的服务条款