「java字符集详解」java语言使用的字符码集是什么
本篇文章给大家谈谈java字符集详解,以及java语言使用的字符码集是什么对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。
本文目录一览:
- 1、java中字符集什么意思
- 2、Java中字符集有哪些呢???
- 3、Java语言所使用的字符集是什么?
- 4、java以二进制传输字符集填啥
- 5、详解Java和C语言的区别在哪里?
- 6、如何理解Java程序使用Unicode字符集编写
java中字符集什么意思
Java 中字符串在内核中使用 Unicode,也就是说每个字符 JVM 只记录它的 Unicode Code Point,只有在网络传输或保存到磁盘上时才需要把它转换成特定的字符集的编码,这个字符集就是把一个 Unicode Code Point 整数翻译成一串 byte[],因为在网络或磁盘上,字节是一个一个排列的,我们需要知道把高位字节排前面还是排后面并且容易推断出哪个哪个字节是一个字符的边界,这样才能把相关的几个字节还原成一个字符而不是把第2个字符的后面半数字节和第3个字符的前面半数的字节拼在一起出一个怪异的字符,我们以前在早期的电脑游戏中不支持双字节汉语时我们经常碰到这个问题,那就是先输入一个汉字,在内存中有2个字节,然后我们按一下 backspace 软件只删除一个字节,我们再输入一个汉字之后一共有3个字节的,这时我们用一个支持汉字的软件来查看这个文字可能是第1个剩下的字节和后面的字符的第1字节拼起来刚好又是另一个汉字,而剩下的第3个字节就不是有意义的绘图符号。
当不需要把 JVM 内存中的字符传输到网络外或磁盘上或打印出来的时候,我们是不需要知道字符集的,在显示在图形界面上时JVM知道怎么把它们显示出来,现在的 Windows 操作系统同样也是 Unicode 内核的,也就是说我们只要说明 Unicode Code Point 它应该知道是什么字符,那么只剩下字体这边是否也是用 Unicode Code Point 来对应一个字符啦(这个我不确定,但估计也是),如果操作系统和字符这边也是按 Unicode Code Point 来对应,那么当我们不保存到磁盘或发送出网络时是完全不需要知道有字符集这回事的。
下面这个例子中处理一个 Unicode 6.0 新标准中收录的汉字,你看到 UTF-8, UTF-16, GB18030 支持它们,但 GB2312 没有收录这个汉字,所以出个问号,也就是我们学说的乱码啦。
什么是 Unicode,下面这样的表格就是 Unicode,而那些坐标数字就是 Code Point.
JDK 1.5 的 String 这个类支持 Unicode Code Point,也就是说能处理任何任意超出双字节的字符的处理,它是一些学术研究者(比如考古,古文献研究) 必须的功能,回想起来曾经的电报码翻译成电脑信息时由于输入法和字符集没有收录这些字没办法通过“输入一个数字得到这个字符的途径",大家都是先扫描一个用图片再在电脑中剪切出每个字符的小图片贴出来的。记得在汉字处理时如果碰到冷僻字时它会超出2个字节,用 charAt() 这个是会出错的,因为 char 类型表示范围在 0 - 255 之间(2个字节),不能直接保存冷僻字,需要用2个 char 来表示一个字,因此 substring 的位置全是错误的,我们需要 offsetByCodePoints 重新计算一次 index 才能正确地 substring。
public static void main(String[] args) throws IOException
{
int[] codePoints = new int[16];
for (int i = 0; i 16; i++)
{
codePoints[i] = 0x20020 + i;
}
String a = new String(codePoints, 0, codePoints.length);
System.out.println("字符串:" + a);
System.out.println("字符串换算成 char[] 存储总长度是 :" + a.length());
System.out.println("codePointAt(7) 索引换算成 charAt 索引 :" + a.offsetByCodePoints(1, 7));
String c = a.substring(a.offsetByCodePoints(1, 7), a.offsetByCodePoints(1, 8));
System.out.println("UTF-8 for " + c + " is " + toString(c.getBytes("UTF-8")) + " == "
+ new String(c.getBytes("UTF-8"), "UTF-8"));
System.out.println("UTF-16 for " + c + " is " + toString(c.getBytes("UTF-16")) + " == "
+ new String(c.getBytes("UTF-16"), "UTF-16"));
System.out.println("GB2312 for " + c + " is " + toString(c.getBytes("GB2312")) + " == "
+ new String(c.getBytes("GB2312"), "GB2312"));
System.out.println("GB18030 for " + c + " is " + toString(c.getBytes("GB18030")) + " == "
+ new String(c.getBytes("GB18030"), "GB18030"));
}
private static String toString(byte[] input)
{
StringBuffer b = new StringBuffer();
b.append('[');
for (int i = 0, size = input.length; i size; i++)
{
b.append(Integer.toString(input[i]));
if (i size - 1)
b.append(',');
}
b.append(']');
return b.toString();
}
这个代码输出如下,为防止百度或者说你的电脑未安装支持冷僻字的字体,不能正确显示冷僻字,这里面用图片啦。
Java中字符集有哪些呢???
字符集(character set)是一个系统支持的所有抽象字符的集合。字符(character)就是各种文字和符号,包括国家文字、标点符号、图形符号、数字等。
如果仅仅是抽象的字符集,其实是顾名思义的,但是我们常说的字符集,其实是指编码字符集(coded character set),比如: Unicode、ASCII、GB2312、GBK等等。什么是编码字符集呢?编码字符集是指,这个字符集里的每一个字符,都对应到唯一的一个代码值,这些代码值叫做代码点(code point),可以看做是这个字符在编码字符集里的序号,字符在给定的编码方式下的二进制比特序列称为代码单元(code unit)。在Unicode字符集中,字母A对应的数值是十六进制下的0041,书写时前面加U+,所以Unicode里A的代码点是U+0041。
常见的编码字符集有:
Unicode:也叫统一字符集,它包含了几乎世界上所有的已经发现且需要使用的字符(如中文、日文、英文、德文等)。
ASCII:早期的计算机系统只能处理英文,所以ASCII也就成为了计算机的缺省字符集,包含了英文所需要的所有字符。
GB2312:中文字符集,包含ASCII字符集。ASCII部分用单字节表示,剩余部分用双字节表示。
GBK:GB2312的扩展,完整包含了GB2312的所有内容。
GB18030:GBK字符集的超集,常叫大汉字字符集,也叫CJK(Chinese,Japanese,Korea)字符集,包含了中、日、韩三国语言中的所有字符。
学习相关java类知识,推荐来北京尚学堂,优秀的师资和科学的授课方式,会带给你完美的学习体验。
Java语言所使用的字符集是什么?
java
中用的是Unicode字符集
包含$美元符号
绝大部分汉字一个字符占两个字节
,所以汉字
在Java中也可以当做变量
,但一般都不这么用
,很容易出错
java以二进制传输字符集填啥
用UTF-8.
java读写文件的有很多种方式,基本都是采用java.io的inputStream和各种基于inputstream的封装实现对文件的读写,最原始的接口提供的便是基于byte的读写,而String可以看做是char[],一个char是8个byte。在最原始的ASCII编码中,我们采用一个字节 也就时8位来表示一个字符(图形字符或者控制字符),而后来1个字节不足以表示现实中的所有字符,于是出现了各种各样的编码格式,常见的比如UTF-8,GBK,UNICODE等。java中的string也是遵循jre中定义的默认字符集(基本为UTF-8),而在byte[]转化成String的过程中可能会由于编码字符集问题导致String逆向回来的byte[]与原来的数组不一致。
详解Java和C语言的区别在哪里?
1Java与C语言各自的优势
C语言是面向过程的语言,执行效率高;Java是面向对象的语言,执行效率比C语言低。
C语言最关键的是比Java多了指针,这也说明了Java的健壮性,还有Java的多线程机制使程序可以并行运行,Java程序多用于网络。
C语言的安全性不如Java,C语言没有Java的垃圾回收机制,申请的空间要手动释放。
Java的通用性好,可以跨平台直接移植,只要有安装Java虚拟机(JVM)就可以了。
2Java和C语言谁的通用性会比较好
在速度上,C语言编写的程序要优于Java,因为Java必须运行在虚拟机的环境中,但是因为虚拟机,Java获得的平台无关性,而C语言的程序有可能需要重新修改编译才能实现平台的移植,
另一方面,C语言比Java语言更“底层”,因此可以用C编写例如硬件的驱动,而Java却不行。Java和C语言还有个明显的不同就是C语言注重的是算法,但是Java却不一样,想用的时候导包就可以了。
C语言的算法很重要,但是Java中的算法没有C语言那么复杂。打印的方法:C语言是printf("??.");而Java是System.out.print("??."),也可以用println,ln表示换行。
Java程序中的基本数据类型(boolean,char,byte,short,int,long,float,double),是对对象的引用;C语言也有许多种基本类型,还有struct,union,enum,数组和指针。
在Java没有枚举、联合类型。Java采用Unicode字符集,C语言通常采用的是ASCII字符集,A—65,a—97。C语言的变量可以不进行初始化,但Java的变量要进行初始化。
在C语言中,char类型占一个字节,在Java中char类型占2个字节。
3Java和C语言各自的特征
Java面向对象的特征主要有封装,继承,多态。类的继承关系是单一的、非多重的,一个子类只有一个父类,子类的父类又只有一个父类。C语言支持“运算符的重载”,这是它的一个很重要的多态特征,是数据抽象和泛型编程的利器。它允许直接对对象进行四则运算,正像基本数据类型那样Java不支持这种多态机制,也是为降低复杂性。
Java可以支持方法重载和重写,所谓重载就是一个类具备多个相同属性行为;重写就是在继承关系中父类的行为在不同的子类上有不同的实现。在Java中比C语言多了一些修饰符,如访问修饰符Public(公共的)、Private(私有的)、Protected(受保护的)、默认。
Java有super关键字,指代父类对象,通常被用于调用父类的构造方法或一般方法C语言则没有super关键字,两者都有this,指代当前对象。
在Java中,除了static、final、private是静态绑定以外,所有方法一律按动态绑定处理。Java中可以将类组织起来用Package打包,而C语言没有。
如何理解Java程序使用Unicode字符集编写
Java显示所有Unicode 字符编写方法:
1.编写UnicodeDisplay 类,该类继承了Jframe 类,实现了ActionListener 接口,该类是为了显示一个图形化的界面而实现的一个显示框架类,该类负责初始化显示窗口以及负责与用户交互,按照用户指定的字体以及风格改变Unicode 的显示,代码如下:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
// 导入所需要的Java 类库
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
public class UnicodeDisplay extends JFrame implements ActionListener {
int page = 0;
UnicodePanel p;
JScrollBar b;
String fontfamily = "Serif";
int fontstyle = Font.PLAIN;
/*构造函数,创建frame、菜单和滚动条*/
public UnicodeDisplay(String name) {
super(name);
p = new UnicodePanel(); // 创建panel
p.setBase((char)(page * 0x100)); // 初始化panel
getContentPane().add(p, "Center"); // 使其居中
// Create and set up a scrollbar, and put it on the right
b = new JScrollBar(Scrollbar.VERTICAL, 0, 1, 0, 0xFF);
b.setUnitIncrement(1);
b.setBlockIncrement(0x10);
b.addAdjustmentListener(new AdjustmentListener() {
public void adjustmentValueChanged(AdjustmentEvent e) {
page = e.getValue();
p.setBase((char)(page * 0x100));
}
关于java字符集详解和java语言使用的字符码集是什么的介绍到此就结束了,不知道你从中找到你需要的信息了吗 ?如果你还想了解更多这方面的信息,记得收藏关注本站。