String.getBytes(Unicode)的疑问 以及 SHIFT-JIS编码范围

String.getBytes(charsetName),这个方法很多人都用过,可是有没有试过temp.getBytes("Unicode");这样的用法,它的返回值很奇怪,第1和第2个字节是-1或-2,比如下面的代码,你能想象出它的结果吗?     

        String temp = "a";

        try {

            byte[] unicodes = temp.getBytes("Unicode");

            System.out.println("unicodes=" + unicodes.length);
            for (int i = 0; i < unicodes.length; i++) {
                System.out.println(unicodes[i]);
            }

            unicodes = temp.getBytes("UnicodeLittleUnmarked");
            System.out.println("unicodes=" + unicodes.length);
            for (int i = 0; i < unicodes.length; i++) {
                System.out.println(unicodes[i]);
            }
           
            unicodes = temp.getBytes("UnicodeBigUnmarked");
            System.out.println("unicodes=" + unicodes.length);
            for (int i = 0; i < unicodes.length; i++) {
                System.out.println(unicodes[i]);
            }

        } catch (UnsupportedEncodingException e) {           
            e.printStackTrace();
        }

输出结果:

unicodes=4
-1
-2
97
0
unicodes=2
97
0

unicodes=2
0
97

为什么会有这种结果呢?蓝色的返回了四个字节,-1,-2,是字节顺的一种表示,这是由sun的类库实现,指示如果没有指定字节就使用默认的UnicodeLittle(在Window平台,别的平台我没测试),但为了标识这种字节顺,就使用了-1,-2在前面表示。

黑色的字,是UnicodeLittleUnmarked的结果,其返回字节只是两个字节,这与Unicode的编码相符合,注意到97,0与使用Unicode时后两个字节顺序一样。

红色的字,是使用UnicodeBigUnmarked的结果,字节顺与Little相反,也没有-1,-2.

由以上应该知道,temp.getBytes("Unicode");应该小心使用,应该注意它返回的-1,-2,这两 个字节,因为在一些网络程序中,特别是当对方是由java以外的语言编写,有可能不会使用这种方式来标识字节顺,因此要了解对方的细节,这样才能保证数据 的准确传递。






+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

想把一个文件中的日文部分提取出来,可是其他的东西都不知道是什么,好在还能查到SHIFT-JIS编码的范围。有个范围怎么着还是能将就是把文字提出来,只是没有格式罢了。转自:http://blog.csdn.net/walacewang/archive/2006/03/03/614382.aspx

Shift_JIS是一个日本电脑系统常用的编码表。它能容纳全形及半形拉丁字母、平假名、片假名、符号及日语汉字。

它被命名为Shift_JIS的原因,是它在放置全形字符时,要避开原本在0xA1-0xDF放置的半角假名字符。

在微软及IBM的日语电脑系统中,即使用了这个编码表。这个编码表称为CP932。

字节结构
以下字元在Shift_JIS使用一个字节来表示。

ASCII字符 (0×20-0×7E),但”\”被\\”¥”取代
ASCII控制字符 (0×00-0×1F、0×7F)
JIS X 0201标准内的半角标点及片假名(0xA1-0xDF)
在部分操作系统中,0xA0用来放置”不换行空格\\”。
以下字元在Shift_JIS使用两个字节来表示。

JIS X 0208字集的所有字符

“第一位字节\\”使用0×81-0×9F、0xE0-0xEF (共47个)
“第二位字节\\”使用0×40-0×7E、0×80-0xFC (共188个)

使用者定义区

“第一位字节\\”使用0xF0-0xFC (共47个)
“第二位字节\\”使用0×40-0×7E、0×80-0xFC (共188个)

在Shift_JIS编码表中,并未使用0xFD、0xFE及0xFF。

在微软及IBM的日语电脑系统中,在0xFA、0xFB及0xFC的两字节区域,加入了388个JIS X 0208没有收录的符号和汉字。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/466617.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux Crontab 安装使用详细说明

yum -y install vixie-cron yum -y install crontabs 说明&#xff1a;vixie-cron 软件包是 cron 的主程序&#xff1b;crontabs 软件包是用来安装、卸装、或列举用来驱动 cron 守护进程的表格的程序。 二、配置 cron 是 linux 的内置服务&#xff0c;但它不自动起来&#xff0…

STM32——流水灯

STM32——流水灯 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 stm32f10x_conf.h&#xff1a;打开stm32f10x_gpio.h和stm32f10x_rcc.h&#xff1b; stm32f10x_gpio.c 和 stm32f10x_rcc.c加入工程模板中&#xff0c;只说重点。 【stm32f10x_rcc.c用…

目标检测模型——One stage(YOLO v5的模型解析及应用)

1. 简介 目标检测分为Two stage和One stage,只使用一个网络同时产生候选区域并预测出物体的类别和位置&#xff0c;所以它们通常被叫做单阶段检测算法&#xff08;One stage&#xff09;。本篇文章只讲One stage模型&#xff0c;常见的模型有YOLO&#xff0c;SSD。 目标检测发…

腾讯回应QQ读取用户浏览器历史记录

腾讯QQ官方认证账号在知乎回应“QQ扫描读取所有浏览器的历史记录”表示&#xff0c;PC QQ存在读取浏览器历史用以判断用户登录安全风险的情况&#xff0c;读取的数据用于在PC QQ的本地客户端中判断是否恶意登录。所有相关数据不会上传至云端&#xff0c;不会储存&#xff0c;也…

【NOIP 模拟赛】 道路

题目描述在二维坐标平面里有 N 个整数点,信息班某一巨佬要访问这 N 个点。刚开始巨佬在点(0,0)处。 每一步,巨佬可以走到上、下、左、右四个点。即假设巨佬当前所在点的坐标是(x,y),那么它下一步可以移动到(x,y1), (x,y-1), (x1,y),(x-1,y)之一。巨佬目标是找到一个移动序列,满…

MySQL实用命令

windows 启动和关闭Myql服务 “net start mysql”就启动mysql服务了&#xff0c;停止mysql服务“net stop mysql”&#xff08;注意&#xff0c;这里是输入的MySQL服务的名字。如果你的MySQL服务的名字是DB或其它名字&#xff0c;你应该输入“net start DB”或其它名&#xff0…

OCR系列——总体概述

最近参加了百度Paddle的动手学OCR课程&#xff0c;特此做一个学习总结。 1. 简介 OCR&#xff08;Optical Character Recognition&#xff0c;光学字符识别&#xff09;是计算机视觉重要方向&#xff0c;传统的OCR一般面向扫描文档类对象&#xff0c;现在的OCR是指场景文字识…

STM32——系统滴答定时器

STM32——系统滴答定时器 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 一、SysTick【内核中】 【风格&#xff1a;先描述一下库对寄存器的封装&#xff0c;再举例实现某些功能】 SysTick定时器被捆绑在NVIC中&#xff0c;用于产生SysTick异常&#…

就算是蜗牛,也有爬到树顶的那一天!~

我知道&#xff0c;现在的我很菜&#xff0c;与年龄及其不相符的菜。 因为之前一直做销售&#xff0c;对于计算机&#xff0c;自己真可算得上是白痴。 是的&#xff0c;我毫不讳言选择计算机是一条退路&#xff0c;也毫不讳言之前的自己是一个懦弱无能的男人。 借口太多了&…

你会用while(1)还是for(;;)写循环代码?

看代码看到for(;;)&#xff0c;然后觉得为什么不写成while(1)呢&#xff0c;所以就做了下面的测试。网上有解释&#xff0c;因为while需要做一次判断&#xff0c;理论上执行会花费的时间更久&#xff0c;for(;;)只是执行了两次空语句&#xff0c;执行会更快for.c#include <s…

树链剖分小结

这里没有水表 树链剖分是一个通过轻重链剖分、dfs序和线段树的使用,在有根树上维护路径和子树信息的有效算法 其预处理时间复杂度为\(O(nlog^2n)\),单次操作时间复杂度为\(O(log^2n)\),常数优秀 主要是防止自己忘记,所以只作简要说明,要学习的可以参考友链里大佬的博客 预处理 …

OCR系列——文本检测任务

1. 简介 文本检测任务是找出图像或视频中的文字位置。不同于目标检测任务&#xff0c;目标检测不仅要解决定位问题&#xff0c;还要解决目标分类问题。 目标检测和文本检测同属于“定位”问题。但是文本检测无需对目标分类&#xff0c;并且文本形状复杂多样。 当前所说的文本…

关于ORACLE 语句中,IN 超过1000个的解决方法

在ORACLE SELECT 语句中 IN 的数据如果超过 1000&#xff0c;就会出错&#xff0c;解决方法也很简单&#xff0c;以C#代码为例&#xff1a; 1、先写一个方法&#xff0c;接收2个参数 参数1&#xff1a;接收 IN里面的数据&#xff0c;如&#xff1a;a1,a2,...a2000 &#xff1b;…

9个提高代码运行效率的小技巧你知道几个?

我们写程序的目的就是使它在任何情况下都可以稳定工作。一个运行的很快但是结果错误的程序并没有任何用处。在程序开发和优化的过程中&#xff0c;我们必须考虑代码使用的方式&#xff0c;以及影响它的关键因素。通常&#xff0c;我们必须在程序的简洁性与它的运行速度之间做出…

STM32——按键

STM32——按键 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 一、GPIO工作模式 1、当I/O端口配置为输入时&#xff1a; 输出缓冲器被禁止 施密特触发输入被激活 根据输入配置(上拉&#xff0c;下拉或浮动)的不同&#xff0c;弱上拉和下拉电阻被连接 …

【Flask模板】include标签

# include标签&#xff1a;1. 这个标签相当于是直接将指定的模版中的代码复制粘贴到当前位置。2. include标签&#xff0c;如果想要使用父模版中的变量&#xff0c;直接用就可以了&#xff0c;不需要使用with context。3. include的路径&#xff0c;也是跟import一样&#xff0…

深度学习——模型的压缩和加速

1. 简介 随着深度学习发展&#xff0c;越来越多的模型被发现和应用&#xff0c;模型的体量也越来越大&#xff0c;出现了模型过于庞大和参数冗余的问题。同时&#xff0c;移动端对模型的需求也是越轻量越好&#xff0c;因此&#xff0c;模型压缩和加速技术应运而生。 模型压缩…

干货,记一次解决录音杂音问题

最近在项目上遇到一个问题&#xff0c;也不能说是最近项目上的问题了&#xff0c;是之前一直存在的问题&#xff0c;但是对项目没什么影响&#xff0c;所以我就不怎么理会&#xff0c;直到最近&#xff0c;同事说这个杂音已经影响到了项目的开发&#xff0c;所以今天花了一天时…

3.5.2 冒泡排序类

那么&#xff0c;我们就以冒泡排序为例&#xff0c;把它改造成一个类。首先&#xff0c;单击菜单&#xff0c;“项目”&#xff0d;“添加类”&#xff0c;添加一个BubbleSort.cs类文件。IDE自动为我们创建如下代码&#xff1a; usingSystem;usingSystem.Collections.Generic;u…

STM32——串口通信

STM32——串口通信 宗旨&#xff1a;技术的学习是有限的&#xff0c;分享的精神是无限的。 一、异步串口通信协议 STM32 的串口非常强大&#xff0c;它不仅支持最基本的通用串口同步、异步通信&#xff0c;还具有 LIN 总线功能&#xff08;局域互联网&#xff09;、IRDA 功能&…