【竞答】String.getBytes("Unicode")中,额外2个字节的来源

老紫竹 2008-10-09 09:14:34
加精
    String s = "1";
byte[] arr = s.getBytes("UNICODE");
System.out.println(Arrays.toString(arr)); // 12


请写出运行结果,并从源代码级解释原因。

JDK 为 6.0
...全文
5505 142 打赏 收藏 转发到动态 举报
写回复
用AI写文章
142 条回复
切换为时间正序
请发表友善的回复…
发表回复
东东不邪 2012-05-16
  • 打赏
  • 举报
回复
“UTF-8以字节为编码单元,没有字节序的问题。UTF-16以两个字节为编码单元,在解释一个UTF-16文本前,首先要弄清楚每个编码单元的字节序。例如“奎”的Unicode编码是594E,“乙”的Unicode编码是4E59。如果我们收到UTF-16字节流“594E”,那么这是“奎”还是“乙”?

Unicode规范中推荐的标记字节顺序的方法是BOM。BOM不是“Bill Of Material”的BOM表,而是Byte order Mark。BOM是一个有点小聪明的想法:

在UCS编码中有一个叫做"ZERO WIDTH NO-BREAKSPACE"的字符,它的编码是FEFF。而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中。UCS规范建议我们在传输字节流前,先传输字符"ZERO WIDTH NO-BREAK SPACE"。

这样如果接收者收到FEFF,就表明这个字节流是Big-Endian的;如果收到FFFE,就表明这个字节流是Little-Endian的。因此字符"ZERO WIDTH NO-BREAK SPACE"又被称作BOM。

UTF-8不需要BOM来表明字节顺序,但可以用BOM来表明编码方式。字符"ZERO WIDTH NO-BREAKSPACE"的UTF-8编码是EF BB BF(读者可以用我们前面介绍的编码方法验证一下)。所以如果接收者收到以EF BBBF开头的字节流,就知道这是UTF-8编码了。”
还是不明白,谁能为我解释一下上边这段话?
我的问题有两点:
1、前面说而FFFE在UCS中是不存在的字符,所以不应该出现在实际传输中,那后面又怎么能“如果收到FFFE,就表明这个字节流是Little-Endian的”收到它呢?
2、UTF-8也有BOM?
sunflowerxy 2010-12-15
  • 打赏
  • 举报
回复
mark~~ 谢谢分享
smile2010cool 2010-12-14
  • 打赏
  • 举报
回复
向高手们致敬……
lyn0032 2010-05-03
  • 打赏
  • 举报
回复
字符编码呀,一直很纠结
gukuitian 2009-10-16
  • 打赏
  • 举报
回复
mm
  • 打赏
  • 举报
回复
mark
East271536394 2008-10-20
  • 打赏
  • 举报
回复

为了在读取字节时能知道所采用的字节序,在传输时采用了一个名为
“ZERO WIDTH NON-BREAKING SPACE”(U+FEFF)的字符用于限定字节
序,开头两个字节为 FE FF 时为 Big-Endian,为 FF FE 时为 Little-Endian。
详见 RFC2781 3.2 节。

在 Java 中直接使用 Unicode 转码时会按照 UTF-16LE 的方式拆分,并加上 BOM。

如果采用 UTF-16 拆分,在 Java 中默认采用带有 BOM 的 UTF-16BE 拆分。
woodAstone 2008-10-20
  • 打赏
  • 举报
回复
标记
骑驴的桑乔 2008-10-20
  • 打赏
  • 举报
回复
en,学习
renmms 2008-10-20
  • 打赏
  • 举报
回复
学习
秦π 2008-10-20
  • 打赏
  • 举报
回复
收藏~mark
wokan_woxihuan 2008-10-20
  • 打赏
  • 举报
回复
wokan_woxihuan 2008-10-20
  • 打赏
  • 举报
回复
if (Session["Userid"] == null)
{
Response.Write("<script>parent.document.location.href='Default.aspx';</script>");
}
else
{
this.TextBox1.Text=DAL.messageDAL.ExecuteScalarmanage(this.Session["userids"].ToString());
}
if(!Page.IsPostBack)
{
if(Session["DataBase"].ToString()!="")
{
this.Fill();
}
}
wokan_woxihuan 2008-10-20
  • 打赏
  • 举报
回复
showde123 2008-10-18
  • 打赏
  • 举报
回复
基本是 两位高手的 峰会。
又一块没接触过的东西。
chinagavin 2008-10-18
  • 打赏
  • 举报
回复
接分
laobaijia 2008-10-16
  • 打赏
  • 举报
回复
不行了 疯了疯了 看不下去了 不懂啊
jackwofe 2008-10-15
  • 打赏
  • 举报
回复
不知道
「已注销」 2008-10-15
  • 打赏
  • 举报
回复
学习了.........
cyberpeng 2008-10-15
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 java2000_net 的回复:]
2个疑问,

1 为何UTF-8没有
2 我想知道,在源代码里的哪个部分做的这个判断。
[/Quote]

1,UTF-8没有是因为UTF-8得到的byte数组唯一,不需要判断高低字节的顺序。
2,这个……得到byte数组后,自己判断头两个字节不行么?
加载更多回复(118)
已经博主授权,源码转载自 https://pan.quark.cn/s/8f7d9b77a9d1 微信小程序是一个轻量级的应用开发平台,主要面向移动设备,由腾讯公司推出,其目的是提供一种便捷的应用体验,用户无需下载安装即可直接使用。"你画我猜"是一种广受欢迎的游戏模式,参与者通过绘画来传达一个词语或短语,其他参与者则根据所见的图画来猜测其含义,这种互动性突出且趣味盎然的模式非常适合在微信小程序平台上实现。在"微信小程序你画我猜游戏demo完整源码"这一资源,我们可以学习到以下几个核心知识点:1. **微信小程序开发环境的构建**:开发者需要安装微信开发者工具,这是进行微信小程序编写与调试的基础。该工具集成了代码编辑、预览、调试等多种功能,为开发者提供了便利的项目开发条件。2. **WXML与WXSS**:WXML是微信小程序的结构性语言,类似于HTML,用于定义页面的结构与布局;WXSS是微信小程序的样式性语言,类似于CSS,负责控制页面的外观。开发者必须熟练掌握这两种语言的语法和特性,以便创建既美观又功能齐全的界面。3. **JavaScript的业务逻辑处理**:在微信小程序,JavaScript主要承担数据绑定、事件处理以及API调用的职责。通过`Page`对象,开发者可以设定每个页面的数据、生命周期事件和方法,从而实现复杂的业务逻辑。4. **微信小程序API的应用**:此游戏demo会运用到微信小程序提供的多种API,包括用户身份验证、网络请求、画板绘图、动画效果等。例如,`wx.createContext()` API可用于获取绘图环境,实现画板功能;`wx.request()`则用于与服务器进行交互,获取游戏数据或提交玩家的绘画作品。5. **游戏逻辑的...
内容概要:本文档是一套针对小说创作人物“真实性”问题的诊断与生成系统,名为“真字门·人物真实性诊断与自性生成操作系统”。它通过“匕·目·乚”三步法(变形、看见、隐匿),帮助作者识别主角为何显得虚假(如提线木偶),并提供可操作工具重塑人物自性。系统包含十维诊断表、真假人物对比案例、真字人物卡模板及六尘感官指纹设计,强调人物应具备内在矛盾、隐藏动机与成长疼痛,而非仅服务于剧情的功能性角色。最终产出具有独特语言、行为与情感印记的真实生命体式角色,并支持向内容变现转化。; 适合人群:写作超过三个月但作品追读率低于20%的小说创作者,尤其适用于陷入角色扁平化、缺乏共鸣困境的新人或瓶颈期作者。; 使用场景及目标:①快速诊断现有主角的“真实度”缺陷,定位核心问题;②利用“真字人物生成器”在30分钟内重构具备心理层次、隐藏动机与成长弧光的角色;③为后续世界观构建、角色关系网及IP变现打下坚实基础。; 阅读建议:建议严格按照导读页顺序操作——先自测诊断分数,再对照案例找差距,最后动手填写空白人物卡模板;务必结合附录B的“林凡”示例反复比对,确保每一层设计都触及角色深层心理,避免停留在表面设定。
内容概要:本文围绕基于改进鲸鱼优化算法的微网系统能量优化管理展开研究,旨在通过智能优化算法提升微网系统的能源利用效率与运行经济性。研究构建了包含光伏发电、储能设备等多种分布式能源的微网系统模型,并以系统综合运行成本最小化为优化目标,提出一种改进的鲸鱼优化算法进行高效求解,有效克服了传统优化算法易陷入局部最优、收敛速度慢等缺陷。通过Matlab平台进行仿真验证,结果表明该方法在降低微网运行成本、优化能量调度、平衡源荷关系以及提升可再生能源消纳能力方面具有显著优势,具备良好的科研价值与实际应用前景。; 适合人群:具备一定电力系统基础知识、优化算法理论背景,从事新能源发电、微电网运行与调度、智能优化算法研究等相关领域的研究生、科研人员及工程技术人员。; 使用场景及目标:①应用于微电网能量管理系统的建模与优化设计;②为智能优化算法在电力系统调度的改进与工程应用提供典型案例;③支撑高水平学术论文撰写、算法复现与创新性研究工作。; 阅读建议:建议结合提供的Matlab代码进行仿真实践,重点分析算法的改进机制与微网系统模型的构建逻辑,对比原始鲸鱼算法的性能差异,深入理解目标函数设计、约束条件处理及参数调优策略,以全面提升科研与工程实践能力。

62,622

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧