我们知道,电子计算机最初是用来进行科学计算的(所以叫做“计算机”),但随着技术的发展,还需要计算机进行其它方面的应用处理。这就要求计算机不仅能处理数值,还能处理诸如文字、特殊符号等其它信息,而计算机本身能直接处理的只有数值信息,所以就要求对这些文字、符号信息进行数值编码,最初的字符集是我们都非常熟悉的ASCII,它是用7个二进制位来表示128个字符,而后来随着不同国家、组织的需要,出现了许许多多的字符集,如表示西欧字符的ISO8859系列的字符集,表示汉字的GB2312-80、GBK等字符集。
字符集的实质就是对一组特定的符号,分别赋予不同的数值编码,以便于计算机的处理。
字符集之间的转换。字符集多了,就会带来一个问题,比如一个字符,在某一字符集中被编码为一个数值,而在另一个字符集中被编码为另一个数值,比如我来创造两个字符集demo_charset1与demo_charset2,在demo_charset1中,我规定了三个符号的编码为:A(0001),B(0010),?(1111);而在demo_charset2中,我也规定了三个符号的编码为:A(1001),C(1011),?(1111),这时我接到一个任务,要编写一个程序,负责在demo_charset1与demo_charset2之间进行转换。由于知道两个字符集的编码规则,对于demo_charset1中的0001,在转换为demo_charset2时,要将其编码改为1001;对于demo_charset1中的1111,转换为demo_charset2时,其数值不变;而对于demo_charset1中的0010,其对应的字符为B,但在demo_charset2没有对应的字符,所以从理论上无法转换,对于所有这类无法转换的情况,我们可以将它们统一转换为目标字符集中的一个特殊字符(称为“替换字符”),比如在这里我们可以将?作为替换字符,所以B就转换为了?,出现了信息的丢失;同样道理,将demo_charset2的C字符转换到demo_charset1时,也会出现信息丢失。
所以说,在字符集转换过程中,如果源字符集中的某个字符在目标字符集中没有定义,将会出现信息丢失。
数据库字符集的选择。
我们在创建数据库时,需要考虑的一个问题就是选择什么字符集与国家字符集(通过create database中的CHARACTER SET与NATIONAL CHARACTER SET子句指定)。考虑这个问题,我们必须要清楚数据库中都需要存储什么数据,如果只需要存储英文信息,那么选择US7ASCII作为字符集就可以;但是如果要存储中文,那么我们就需要选择能够支持中文的字符集(如ZHS16GBK);如果需要存储多国语言文字,那就要选择UTF8了。
数据库字符集的确定,实际上说明这个数据库所能处理的字符的集合及其编码方式,由于字符集选定后再进行更改会有诸多的限制,所以在数据库创建时一定要考虑清楚后再选择。
而我们许多朋友在创建数据库时,不考虑清楚,往往选择一个默认的字符集,如WE8ISO8859P1或US7ASCII,而这两个字符集都没有汉字编码,所以用这种字符集存储汉字信息从原则上说就是错误的。虽然在有些时候选用这种字符集好象也能正常使用,但它会给数据库的使用与维护带来一系列的麻烦,在后面的迭代过程中我们将深入分析。
客户端的字符集。
有过一些Oracle使用经验的朋友,大多会知道通过NLS_LANG来设置客户端的情况,NLS_LANG由以下部分组成:NLS_LANG=<Language>_<Territory>.<Clients Characterset>,其中第三部分<Clients Characterset>的本意就是用来指明客户端操作系统缺省使用的字符集。所以按正规的用法,NLS_LANG应该按照客户端机器的实际情况进行配置,尤其对于字符集一项更是如此,这样Oracle就能够在最大程度上实现数据库字符集与客户端字符集的自动转换(当然是如果需要转换的话)。
总结:
1、字符集:将特定的符号集编码为计算机能够处理的数值;
2、字符集间的转换:对于在源字符集与目标字符集都存在的符号,理论上转换将不会产生信息丢失;而对于在源字符集中存在而在目标字符集中不存在的符号,理论上转换将会产生信息丢失;
3、数据库字符集:选择能够包含所有将要存储的信息符号的字符集;
4、客户端字符集设置:指明客户端操作系统缺省使用的字符集。
分享到:
相关推荐
Java字符集基础知识与问题 字符集编码是计算机处理文本数据的基础,不同的编码方式适用于不同的应用场景。本文主要讨论编码的基本知识,特别是与Java相关的部分,包括ISO8859-1、GB2312/GBK、Unicode以及UTF编码。...
字符集基础知识是编程领域不可或缺的一部分,特别是在处理多语言和国际化问题时。本文主要围绕字符集的概念,特别是如何解决Java中的乱码问题进行了详尽的解释。以“中文”二字为例,我们可以深入理解从Java源文件到...
#### 一、字符集基础知识 **1. 字符集定义:** 字符集是指用于表示文字的一组符号集合。在计算机科学领域,字符集是用于编码文本的基础,它规定了如何用数字表示各种字符。不同的字符集支持不同语言的文字显示。 *...
在计算机科学领域,字符集(Character Set)是用于表示文本的一组符号集合,它定义了可以被编码的字符范围...了解这些字符集的基本知识,对于开发者来说是进行国际化开发的基础,也是解决多语言环境下文本问题的关键。
字符集和字符编码是计算机处理文本的基础,它们决定了如何将人类使用的文字和符号转换成计算机可以...了解这些字符集和编码的知识,有助于在编程、网页设计、数据库管理等领域正确处理多语言文本,确保信息的准确传输。
#### 二、基础知识概述 1. **字符集**:字符集是用于定义字符编码方案的一组规则,它规定了如何将字符映射到二进制代码上。不同的字符集可以支持不同的语言文字。 2. **CP850与CP936**: - **CP850**:也称为OEM ...
【Sybase ASE字符集知识详解】 Sybase Adaptive Server Enterprise(ASE)是一款强大的关系型数据库管理系统...无论是开发人员、DBA还是系统管理员,都需要掌握这些基础知识,以确保系统的稳定运行和数据的正确处理。
#### 二、Oracle字符集的基础知识 1. **Oracle字符集的基本概念**: - **字符集(Character Set)**:用于定义如何表示文字和符号的集合。 - **国家字符集(National Character Set)**:为特定语言环境定义的...
Oracle数据库系统支持多种字符集,以适应不同地区的语言和特殊字符需求。字符集定义了数据库如何存储和处理字符,对于多语言...在日常工作中,理解并掌握字符集的相关知识,能有效避免因字符编码问题引发的诸多困扰。
### Windows字符集知识点详解 #### 一、概述 在计算机科学与信息技术领域中,字符集是一种重要的基础概念,它定义了一组符号与用于表示这些符号的数字编码方式。本篇文章将基于提供的PDF文档《Windows字符集.pdf》...
同时,理解这些基础知识也有助于我们更好地理解和利用各种工具,如文本编辑器、数据库系统、编程语言等。 总的来说,字符集和字符编码是计算机处理文本的核心,它们在信息技术的各个领域都有广泛的应用。从简单的...
学习字符集的一些问题及解决,还有一些关于字符集的基础知识的学习。
总之,理解和掌握Web开发中的字符集和字符编码是避免乱码、确保数据正确显示的基础。开发者应确保在各个层面(浏览器、服务器、数据库)都正确设置和处理字符编码,以保证信息的准确传递。在实际工作中,要时刻关注...
#### 一、编码与乱码基础知识 在计算机科学领域,字符集(Character Set)是指一系列符号和电子通信代码的标准集合。每种字符集都有其特定的应用场景和优势。例如,ASCII(American Standard Code for Information ...
1. **字符集的基础知识**:首先,文章可能会介绍字符集的概念,如ASCII编码,它是最早的7位编码系统,只能表示英文字符;然后是扩展的8位编码,如ISO-8859-1,以及针对中文的GBK编码等。 2. **Unicode与UTF-8**:...
本文将从基础概念开始,逐步引导读者了解字符集编码转换的相关知识。 首先,让我们了解什么是 ASCII 编码。ASCII 编码是英文显示文字所需要的 256 个字符(比如,英文字母、数字、标点符号等等)。但是,对于中文来...
ASCII是最基础的字符集,包含英文、数字和一些特殊符号;而GB2312和GBK是中国大陆常用的简体中文字符集,UTF-8则是一种能够表示世界上大部分语言字符的编码方式,它采用了变长编码,能兼容ASCII并支持多语言。 二...
Unicode 和字符集是计算机处理文本时的基础,它们对于软件开发者来说至关重要。理解这些概念能帮助开发者正确地处理各种语言和符号,确保软件的...作为开发者,深入理解这些基础知识对于创建全球化应用程序至关重要。