oracle gbk ebcdic,文件编码 ANSI、GBK、GB2312、MS936、MS932、SJIS、Windows-31 、EUC-JP 、EBCDIC 等等之间的区别与联系...

■前言

暂且不谈 UTF-8,Unicode (UTF-8只是Unicode的一种实现方式)

https://blog.csdn.net/sxzlc/article/details/106084402  ← win10下,以十六进制形式查看文件

关于文件编码的描述,有很多种描述方式

中文:ANSI,GBK,GB2312, MS936

日文:ANSI, MS932,SJIS(SHIFT JIS),Windows-31J,EUC-JP,ISO-2022-JP

英文:ANSI, ASCII,MS437

还有IBM 大机 Mainframe : EBCDIC

(EBCDIC有好多种编码:1140,500,20290 )

■分步说明1

先理解什么是 ANSI

我们使用记事本保存文件时,都有这么一个选项。

不论你的系统时中文系统,或者日文系统。

2deacb2d4170e6d4d6a513b1d9972a07.png

ANSI 是 的缩写 (美国国家标准学会(American National Standards Institute: ANSI))

ANSI是一种字符代码,为使计算机支持更多语言,

通常使用 0x00~0x7f 范围的1 个字节来表示 1 个英文字符。

超出此范围的使用0x80~0xFFFF来编码

不同的国家和地区制定了不同的标准,由此产生了 GB2312、GBK、GB18030、Big5、Shift_JIS 等各自的编码标准。

也就是说,

・在中文系统中,使用ANSI保存,编码集是 GBK(MS936),

・在日文系统中,使用ANSI保存,编码集是 Shift_JIS(MS932)

即,对于不同语言来说,ANSI对应的编码是不同的   !!!

https://baike.baidu.com/item/ANSI/10401940?fr=aladdin ← ANSI 百度百科

https://www.cnblogs.com/malecrab/p/5300486.html ← 什么时ANSI编码 各个国家语言的ANSI编码

ANSI对应的是 cmd 命令行中 chcp 的编码code。

30dad3a3acb8a4c1448114162424757c.png

https://blog.csdn.net/sxzlc/article/details/106270405 ← 各个语言的,页面编码一览 chcp一览

这也是,为社么有的文件,我们使用chcp后,再次查看,就不再乱码的原因

■分步说明2

●GB2312与GBK的区别

・GB2312 :前面的一个字节(高字节)从0xA1用到 0xF7,后面一个字节(低字节)从0xA1到0xFE,这样就可以组合出大约7000多个简体汉字了

・GBK: 不再要求低字节一定是127号之后的内码,只要第一个字节是大于127就固定表示这是一个汉字的开始,

GBK 包括了 GB2312 的所有内容,同时又增加了近20000个新的汉字(包括繁体字)和符号。

---  比如下面的【天】,GB2312 编码表中查得,可以看到编码表,低字节 从A1 开始

https://blog.csdn.net/sxzlc/article/details/7060611 ← GB2312 编码表

CC EC

8dddbd7de4fe4ab14033f50b72f624ed.png

---

https://blog.csdn.net/ldanduo/article/details/8203532 ← 此文章中,记述了GB2312 与 GBK 的区别

●MS932,SJIS(SHIFT JIS),Windows-31J 之间的关系

●windows-31J

Shift_JIS 的文字集合基本是按照JIS X 0208规定的。

但实际上各个厂商各自进行扩展,包含了大量重复的、规格以外的文字。

因此Windows在本来的 Shift_JIS的文字集合之外,又增加了NEC扩展、IBM扩展所包含的文字。

这种规格和实际情况的分歧长期存在,随着windows-31J的规格化,混乱情况有所改善。

https://www.iteye.com/blog/gohands-937775 ← Shift_JIS、EUC-JP、ISO-2022-JP这三种编码的区别

https://blog.csdn.net/sxzlc/article/details/106267866  ← 个人对Shift_JIS 的理解

a926efc25129140926e72e4e9980631a.png

http://una.soragoto.net/topics/13.html ← 此文章中,记述了Shift-JIS的发展 (日文原文)

---

●SJIS(SHIFT JIS)chcp 932

https://blog.csdn.net/sxzlc/article/details/106270405 ← 各个语言的,页面编码一览 chcp一览

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

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

http://charset.7jp.net/sjis.html  ← SJIS编码集

---

■分步说明3

●SJIS以外的日文编码

・EUC-JP是被Linux和Solaris广泛地使用的文字编码。chcp 20932

https://blog.csdn.net/sxzlc/article/details/106270405  ← 各个语言的,页面编码一览 chcp一览

・ISO-2022-JP主要被Email使用的文字编码。 只使用7个bit,第8个bit不使用,所以不适合程序中的字符串处理,主要使用在网络中的数据交换中。

■分步说明4

EBCDIC

IBM 大机的编码语言

诞生于 1963 - 1964

早于 ASCII 编码,与ASCII是不同的编码,(英文数字对应的二进制是不相同的)

ASCII 诞生于 1967, 最后一次修正在1986年

https://blog.csdn.net/chy555chy/article/details/52065250

chcp 500

f3bfa002adc59231e08b534c0f8f33c3.png

chcp 20290

46163790aca3652173690abc076f1312.png

https://blog.csdn.net/sxzlc/article/details/106270405  ← 各个语言的,页面编码一览 chcp一览

■知识扩展

・Solaris 是Sun Microsystems研发的计算机操作系统。它被认为是UNIX操作系统的衍生版本之一

Solaris [soʊˈlɛrɪs]  当然,sun被oracle收购后,已经是oracle的东西了。

・6个Unix的变种

http://blog.chinaunix.net/uid-20832381-id-1743740.html ← linux与UNIX(solaris/aix/hp-ux)的比较

===

SGI Irix、

IBM AIX、

Compaq Tru64 Unix、

Hewlett-Packard HP-UX、

SCO UnixWare、

Sun Solaris

===

・linux不是Unix,Unix是商业软件,Linux是开源的

https://blog.csdn.net/sxzlc/article/details/103652857  ← Linux Unix之间的区别

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在Java中,可以使用Java.nio.charset.Charset类来实现EBCDICGBK之间的转换。具体实现可以按照以下步骤进行: 1. 创建EBCDIC编码GBK编码的Charset对象。 ```java Charset charsetEBCDIC = Charset.forName("IBM1047"); Charset charsetGBK = Charset.forName("GBK"); ``` 2. 将需要转换的文本内容转换成ByteBuffer对象。 ```java String text = "需要转换的文本内容"; ByteBuffer byteBuffer = charsetEBCDIC.encode(text); ``` 3. 将ByteBuffer对象中的内容转换成字符数组。 ```java char[] charArray = charsetGBK.decode(byteBuffer).array(); ``` 4. 将字符数组转换成字符串。 ```java String result = new String(charArray); ``` 完整的代码示例: ```java import java.nio.ByteBuffer; import java.nio.charset.Charset; public class EBCDICAndGBKConverter { public static void main(String[] args) { // 创建EBCDIC编码GBK编码的Charset对象 Charset charsetEBCDIC = Charset.forName("IBM1047"); Charset charsetGBK = Charset.forName("GBK"); // 需要转换的文本内容 String text = "需要转换的文本内容"; // 将需要转换的文本内容转换成ByteBuffer对象 ByteBuffer byteBuffer = charsetEBCDIC.encode(text); // 将ByteBuffer对象中的内容转换成字符数组 char[] charArray = charsetGBK.decode(byteBuffer).array(); // 将字符数组转换成字符串 String result = new String(charArray); System.out.println(result); } } ``` 注意:在进行字符编码转换时,需要考虑字符集的兼容性问题,否则可能会出现乱码等问题。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值