分辨中文字符和西文字符

ASCⅡ码中,采用GB2312标准,怎么区分汉字和西文字符?
AB F4 D1 E3 78 C2 B7 55 中哪几个是西文字符,哪几个是中文字符?

注:答案上说是两个西文字符,三个中文字符,答案可能有误。

1、可以通过识别字符编码的长短实现。

由于英文字符只占一个位,而中文字符占两位,但是在国际字符编码标准unicode中,所有的文字都占两位,所以unicode中所有的英文数字第一个byte的值绝对是0x00,只要两个字节两个字节的读取,通过判断第一个字符是不是0x00就可以判断中文字符和英文字符。

但是请注意,unicode是有大端和小端编码之分的,两者字符识别的顺序刚好相反,所以请注意,使用小端编码的话0x00就会在前面,windows中都是使用的小段编码。还有在文本文件中,unicode是有dom头的,注意不要把文件头读进去。

2、根据每个字节转化为数字判断。

大家知道西文字符主要是指ASCII码,它用一个字节表示。且这个字符转换成数字之后,该数字是大于0的,而汉字是两个字节的,第一个字节的转化为数字之后应该是小于0的,因此可以根据每个字节转化为数字之后是否小于0,判断它是否是汉字。

扩展资料

在台湾、香港与澳门地区,使用的是繁体中文字符集。而1980年发布的GB2312面向简体中文字符集,并不支持繁体汉字。在这些使用繁体中文字符集的地区,一度出现过很多不同厂商提出的字符集编码,这些编码彼此互不兼容,造成了信息交流的困难。

为统一繁体字符集编码,1984年,台湾五大厂商宏碁、神通、佳佳、零壹以及大众一同制定了一种繁体中文编码方案,因其来源被称为五大码,英文写作Big5,后来按英文翻译回汉字后,普遍被称为大五码。

大五码是一种繁体中文汉字字符集,其中繁体汉字13053个,808个标点符号、希腊字母及特殊符号。大五码的编码码表直接针对存储而设计,每个字符统一使用两个字节存储表示。

第1字节范围81H-FEH,避开了同ASCII码的冲突,第2字节范围是40H-7EH和A1H-FEH。因为Big5的字符编码范围同GB2312字符的存储码范围存在冲突,所以在同一正文不能对两种字符集的字符同时支持。

温馨提示:答案为网友推荐,仅供参考
第1个回答  2021-01-24

可以通过识别字符编码的长短实现。

由于英文字符只占一个位,而中文字符占两位,但是在国际字符编码标准unicode中,所有的文字都占两位,所以unicode中所有的英文数字第一个byte的值绝对是0x00,只要两个字节两个字节的读取,通过判断第一个字符是不是0x00就可以判断中文字符和英文字符。

扩展资料:

在 ASCII 编码中,一个英文字母字符存储需要1个字节。在 GB 2312 编码或 GBK 编码中,一个汉字字符存储需要2个字节。在UTF-8编码中,一个英文字母字符存储需要1个字节,一个汉字字符储存需要3到4个字节。

在UTF-16编码中,一个英文字母字符或一个汉字字符存储都需要2个字节(Unicode扩展区的一些汉字存储需要4个字节)。在UTF-32编码中,世界上任何字符的存储都需要4个字节。

参考资料来源:百度百科-字符编码

本回答被网友采纳
第2个回答  2021-01-08

1、可以通过识别字符编码的长短实现。

由于英文字符只占一个位,而中文字符占两位,但是在国际字符编码标准unicode中,所有的文字都占两位,所以unicode中所有的英文数字第一个byte的值绝对是0x00,只要两个字节两个字节的读取,通过判断第一个字符是不是0x00就可以判断中文字符和英文字符。

但是请注意,unicode是有大端和小端编码之分的,两者字符识别的顺序刚好相反,所以请注意,使用小端编码的话0x00就会在前面,一般windows中都是使用的小段编码。还有在文本文件中,unicode是有dom头的,注意不要把文件头读进去。

2、根据每个字节转化为数字判断。

大家知道西文字符主要是指ASCII码,它用一个字节表示。且这个字符转换成数字之后,该数字是大于0的,而汉字是两个字节的,第一个字节的转化为数字之后应该是小于0的,因此可以根据每个字节转化为数字之后是否小于0,判断它是否是汉字。

扩展资料:

ASCII码于1961年提出,用于在不同计算机硬件和软件系统中实现数据传输标准化,在大多数的小型机和全部的个人计算机都使用此码。ASCII码划分为两个集合:128个字符的标准ASCII码和附加的128个字符的扩充和ASCII码。比较EBCDIC。其中95个字符可以显示。另外33个不可以显示。 标准ASCII码为7位,扩充为8位。

目前使用最广泛的西文字符集及其编码是 ASCII 字符集和 ASCII 码( ASCII 是 American Standard Code for Information Interchange 的缩写),它同时也被国际标准化组织( International Organization for Standardization, ISO )批准为国际标准。

基本的 ASCII 字符集共有 128 个字符,其中有 96 个可打印字符,包括常用的字母、数字、标点符号等,另外还有 32 个控制字符。标准 ASCII 码使用 7 个二进位对字符进行编码,对应的 ISO 标准为 ISO646 标准。

参考资料来源:百度百科-字符编码




本回答被网友采纳
第3个回答  2021-04-08
明确地说,在目前 Unicode 环境下还多有使用的,是全角 ASCII 字符:
从 U+FF01 的全角感叹号(!)到 U+FF5E 的全角浪线(~),对应 ASCII 从 U+0020 的半角感叹号(!)到 U+007E 的半角浪线(~),中间包括阿拉伯数字、拉丁字母和许多标点。

如 @孙炜 所言,全角 ASCII 字符出现的初衷基本是技术原因,而非设计原因。也很难说它当初是为了解决中西文混排。
实际上,用全角 ASCII 字符来书写西文恰恰是在逃避中西文混排——把西文排成中文的模样,而不顾(或者说放弃)西文原本应有的样式。这话不是在批评,是在描述当年不得不做的决策。用 @孙炜 在评论的更为中性的措词,即「他们想把这种异质的成分尽量同质化」。

全角的数字和拉丁字母字符从来都不适合真正的「中西文混排」,只勉强适合中文文本中零星出现的、西文性质并不显著的那些片段(即「异质」不明显的)。比如X光、B超、A股,等等,比如纵中横数字。当无法实现完善、专业的中西文混排时,用这些为中文优化的全角字符能简化问题,而得到及格的效果。
除此以外,全角数字和拉丁字母字符实在没有什么好用的。完全为汉字优化的一字宽的数字和拉丁字母样式完全不适合排版典型中西文混排中真正的西文。

「!(),.:;?[]{}~」等几个全角 ASCII 字符的情况和全角数字、拉丁字母字符的情况不同。它们和原半角字符的分立恰好提供了 CJK 标点和西文标点的分立,加上「、。〈〉《》「」『』【】〔〕〖〗」等字符,提供了 CJK 所需的专用标点字符。
这样的中西文标点字符分立,是有利于中西文混排的,便于字体和排版环境为中西文各自的习惯分别优化。而「“ ‘ ’ ”—…」等几个字符没能分立也是造成中西文混排困难的原因之一(因为它们完全依赖字体来区分中文、西文样式,无法在字符层面区分)。

另有「"'-<>^_`|」等全角 ASCII 字符在排版中几乎没有任何用途(因为 CJK 文本用不到它们),却因为技术原因而留下了全角版本。本回答被网友采纳
第4个回答  推荐于2017-10-13
可以通过识别字符编码的长短实现。

由于英文字符只占一个位,而中文字符占两位,但是在国际字符编码标准unicode中,所有的文字都占两位,所以unicode中所有的英文数字第一个byte的值绝对是0x00,只要两个字节两个字节的读取,通过判断第一个字符是不是0x00就可以判断中文字符和英文字符。

但是请注意,unicode是有大端和小端编码之分的,两者字符识别的顺序刚好相反,所以请注意,使用小端编码的话0x00就会在前面,一般windows中都是使用的小段编码。

还有在文本文件中,unicode是有dom头的,注意不要把文件头读进去。
相似回答