精华内容
下载资源
问答
  • 作者:朱金灿来源:http://blog.csdn.net/clever101 本文简单介绍计算机中两大字符集:多字节字符集和unicode字符集的出现及关系。 首先我们需要明白的是计算机是如何找到字符的,原来计算机通过一个字符编号来...

    作者:朱金灿

    来源:http://blog.csdn.net/clever101

     

            本文简单介绍计算机中两大字符集:多字节字符集和unicode字符集的出现及关系。

     

            首先我们需要明白的是计算机是如何找到字符的,原来计算机通过一个字符编号来找到字符,这个和学校里每个学生都有一个学号类似。这里的字符编号和对应的字符就构成了一个字符集。因为计算机最早是在英语国家诞生的,大多数英文信息是由英文字母、数字以及一些其它字符构成了一个128个字符的ASCII字符集。本来这对于英语国家来说够用了。但是随着计算机的普及,非英语国家的文字字符也需要用计算机来存储,这时字符集就需要一种扩展机制了。一种简单的扩展机制就是兼容ASCII字符集,在后面加上自己的编码。可以想象,不同字符的编号长度是不一样的,有些是两个字节,有些是三个字节甚至四个字节等等。这样的字符集就叫多字节字符集。多字节字符集就是多种字符集的统称,比如中文字符集GB2312和GBK、日文编码JIS都是多字节字符集。

     

            由于多字节字符遵循的是各个国家的编码,要进行信息交换必须进行繁琐的转换。这时就有人想:有没有一种编码规则,能给全世界的字符都编上统一的编号呢?就这样unicode字符集诞生了。unicode字符集顾名思义就是每个字符都有一个唯一的编码。最早的unicode字符是采用两个字节也是16位对字符进行编码(也就是能够对65536个字符进行编号),故被称为utf-16。后来发现大多信息都是英文构成的,为了节省空间,同时为了兼容单字节的处理系统,就出现了一种变种的unicode字符集——utf8。utf8的实现原理和多字节字符集一样,前面是128个子符是ASCII字符,后面的采用变长的编码方式,就是一个字符可能用两个字节、三个字节或四个字节进行编码。再到后面发现16位的编码也不够用了,采用32位编码,这样就出现了utf-32。


    参考文献:

     

    1. Unicode字符集和多字节字符集关系

    展开全文
  • 编码字符集字符集编码

    千次阅读 2019-02-17 12:38:57
    编码字符集字符集编码 编码字符集 ASCII:最先出现的编码字符集,包含了大小写的从A到Z和符号,用8位表示,共258个字符,老美一开始只固定了前127个字符(称为半角),而后面127个字符是在计算机在其他欧美国家...

    编码字符集与字符集编码

    编码字符集

    • ASCII:最先出现的编码字符集,包含了大小写的从A到Z和符号,用8位表示,共258个字符,老美一开始只固定了前127个字符(称为半角),而后面127个字符是在计算机在其他欧美国家开始使用时扩展的,是扩展字符集(全角)。

    • GB2312和GBK:当中国开始使用计算机表示汉字时,ASCII已经没有空间可以给汉字字符填充,所以中国索性把两个连在一起的大于127的ASCII字符当作一个汉字,这个方案称为GB2312;当GB2312不足够表示所有汉字时,中国规定 两个连在一起的第一个字符大于127的两个ASCII字符当作一个汉字,称为GBK方案。因此会出现:一个汉字字符相当于两个英文字符的情况。

    • Unicode:当计算机在全世界广泛传播时,出现了许多编码字符集,各个编码字符集之间无法相互识别,当同时出现在同一篇文档中会出现乱码。因此国际标准组织ISO出台了一套16位的字符编码方案以总括现有的各个编码字符集, 称为Unicode。在互联网出现之后,ISO规定了每次传输16位的方案称为UTF-16

    字符集编码

    • Unicode是无法用16位表示所有文字字符的,随着不断有文字填充,必将使用更多位表示,这就将导致ASCII中的半角前面许多位都是0,白白浪费了空间。因此出现了Unicode的字符集编码方案

    • UTF-16:Unicode最开始的编码方案,笼统地用两个字节表示一个字符,不能解决空间浪费的问题

    • UTF-8:网络每次传输8位,可变长度的编码方案,可由1~4个字节表示一个字符,增加标识符以表示多少个字节表示一个字符,更加自由,解决了空间浪费问题。但也存在问题,有些文字由于增加了多个标识符,导致需要多个字节表示,如一个汉字字符需要三个字节表示。

    Java中的编码字符集

    • I.java.lang.Character类规定了java使用的编码字符集,从java.lang.Character类注释的解读,我们可以知道:

      Java使用了Unicode编码字符集,具体来说Java中的字符数值范围是从0X0000到0x10FFFF,而0x0000到0xFFFF支持UTF-16编码方案,称为BMP(Basic Multilingual Plane 基础多语言面);大于0XFFFF的字符即是扩展字符,大小相当于两个char类型字符。

      char类型只支持BMP(即UTF-16包含的字符),char类型数据的value是一个Character类型数据,如’\u005CuD840’,它代表的是该char类型数据在Unicode database中指向的字符,即Character类型不等同于char类型, 如Character.isLetter(’\u005CuD840’)返回的是false,因为Character.isLetter(char char)要求的是传入一个char类型的数据,但该语句中传入的是Character类型的数据

      int类型除了支持BMP外还支持扩展字符,如 Character.isLetter(0x2F81A)返回的是true,0x2F81A是一个扩展字符的数值.

      • 注释原文如下:
        		 * <p>A {@code char} value, therefore, represents Basic
        		 * Multilingual Plane (BMP) code points, including the surrogate
        		 * code points, or code units of the UTF-16 encoding. An
        		 * {@code int} value represents all Unicode code points,
        		 * including supplementary code points. The lower (least significant)
        		 * 21 bits of {@code int} are used to represent Unicode code
        		 * points and the upper (most significant) 11 bits must be zero.
        		 * Unless otherwise specified, the behavior with respect to
        		 * supplementary characters and surrogate {@code char} values is
        		 * as follows:
        		 *
        		 * <ul>
        		 * <li>The methods that only accept a {@code char} value cannot support
        		 * supplementary characters. They treat {@code char} values from the
        		 * surrogate ranges as undefined characters. For example,
        		 * {@code Character.isLetter('\u005CuD840')} returns {@code false}, even though
        		 * this specific value if followed by any low-surrogate value in a string
        		 * would represent a letter.
        		 *
        		 * <li>The methods that accept an {@code int} value support all
        		 * Unicode characters, including supplementary characters. For
        		 * example, {@code Character.isLetter(0x2F81A)} returns
        		 * {@code true} because the code point value represents a letter
        		 * (a CJK ideograph).
        		 * </ul>
        		 *
        		 * <p>In the Java SE API documentation, <em>Unicode code point</em> is
        		 * used for character values in the range between U+0000 and U+10FFFF,
        		 * and <em>Unicode code unit</em> is used for 16-bit
        		 * {@code char} values that are code units of the <em>UTF-16</em>
        
    • II.Character类中提供了判断字符是BMP还是扩展字符的方法

    		public static final char MIN_VALUE = '\u0000';
    		
    		public static final char MAX_VALUE = '\uFFFF';					
    
    		public static final int MIN_CODE_POINT = 0x000000;
    		
    		public static final int MAX_CODE_POINT = 0X10FFFF;
    
    		public static boolean isBmpCodePoint(int codePoint) {
    	        return codePoint >>> 16 == 0;
    	        // Optimized form of:
    	        //     codePoint >= MIN_VALUE && codePoint <= MAX_VALUE
    	        // We consistently use logical shift (>>>) to facilitate
    	        // additional runtime optimizations.
    	    }
    
    		public static boolean isValidCodePoint(int codePoint) {
    	        // Optimized form of:
    	        //     codePoint >= MIN_CODE_POINT && codePoint <= MAX_CODE_POINT
    	        int plane = codePoint >>> 16;
    	        return plane < ((MAX_CODE_POINT + 1) >>> 16);
    	    }
    

    提供了将扩展字符从数值转为字符类型的方法

    		//从此处我们可以发现,一个扩展字符相当两个char类字符
    		static void toSurrogates(int codePoint, char[] dst, int index) {
    	        // We write elements "backwards" to guarantee all-or-nothing
    	        dst[index+1] = lowSurrogate(codePoint);
    	        dst[index] = highSurrogate(codePoint);
    	    }
    
    展开全文
  • oracle 修改字符集 为ZHS16GBK

    万次阅读 2017-04-26 10:55:09
    相信很多人都会遇到安装oracle后字符集编码不一致而导致的各种问题,现在讲下如何修改字符集格式。 一、oracle server 端 字符集查询 select userenv('language') from dual 其中NLS_CHARACTERSET 为server端字符...

    相信很多人都会遇到安装oracle后字符集编码不一致而导致的各种问题,现在讲下如何修改字符集格式。

     

    一、查询字符集

    1、查询oracle server端 字符集

    select userenv('language') from dual

    其中NLS_CHARACTERSET 为server端字符集

    NLS_LANGUAGE 为 server端字符显示形式


    2、查询oracle client端 字符集

    Linux:

    $echo $NLS_LANG

    如果发现你select 出来的数据是乱码,请把client端的字符集配置成与linux操作系统相同的字符集。如果还是有乱码,则有可能是数据库中的数据存在问题,或者是oracle服务端的配置存在问题。

    Windows:

    cmd下输入命令:chcp

    默认为936,中国 - 简体中文(GB2312)

     

    二、server端字符集修改

    更改字符集步骤方法(WE8ISO8859P1 --> ZHS16GBK)

    开始 - 运行 - 输入cmd 进入命令提示符

    输入 sqlplus /nolog

    以管理员身份登录sqlplus:

    SQL> conn /as sysdba

    Connected.

    SQL> shutdown immediate;

    Database closed.

    Database dismounted.

    ORACLE instance shut down.

    SQL> startup mount

    ORACLE instance started.

    Total System Global Area  236000356 bytes

    Fixed Size                   451684 bytes

    Variable Size             201326592 bytes

    Database Buffers           33554432 bytes

    Redo Buffers                 667648 bytes

    Database mounted.

    SQL> ALTER SYSTEM ENABLE RESTRICTED SESSION;

    System altered.

     

    查询连接参数设置并记下参数值:

    SQL> show parameter job_queue_processes; 
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    job_queue_processes                  integer     10

    SQL> show parameter aq_tm_processes;
    NAME                                 TYPE        VALUE
    ------------------------------------ ----------- ------------------------------
    aq_tm_processes                      integer     1

     

    暂时将连接数改为0防止任务自动执行(确保无连接可省略):

    SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;

    System altered.

    SQL> ALTER SYSTEM SET AQ_TM_PROCESSES=0;

    System altered.

     

    打开数据库并修改字符集:

    SQL> alter database open;

    Database altered.

    SQL> ALTER DATABASE CHARACTER SET ZHS16GBK;

    ALTER DATABASE CHARACTER SET ZHS16GBK

    *

    ERROR at line 1:

    ORA-12712: new character set must be a superset of old character set

     

    提示我们的字符集:新字符集必须为旧字符集的超集,这时我们可以跳过超集的检查做更改:

    SQL> ALTER DATABASE character set INTERNAL_USE ZHS16GBK;

    Database altered.

    SQL> select * from v$nls_parameters;

    19 rows selected.

     

    关闭数据库并切换到挂载模式,还原连接参数设置并打开数据库(之前未修改参数可省略):

    SQL> shutdown immediate;

    Database closed.

    Database dismounted.

    ORACLE instance shut down.

    SQL> startup mount

    ORACLE instance started.

    Total System Global Area  236000356 bytes

    Fixed Size                   451684 bytes

    Variable Size             201326592 bytes

    Database Buffers           33554432 bytes

    Redo Buffers                 667648 bytes

    Database mounted.

    SQL> alter system set job_queue_processes=10;
    System altered.

    SQL> alter system set aq_tm_processes=1;
    System altered.

    SQL> alter database open;

    Database altered.

     

    重启检查是否更改完成:

    SQL> shutdown immediate;

    Database closed.

    Database dismounted.

    ORACLE instance shut down.

    SQL> startup

    ORACLE instance started.

    Total System Global Area  236000356 bytes

    Fixed Size                   451684 bytes

    Variable Size             201326592 bytes

    Database Buffers           33554432 bytes

    Redo Buffers                 667648 bytes

    Database mounted.

    Database opened.

    SQL> select * from v$nls_parameters;

    19 rows selected.

     

    三、添加环境变量修改client端字符集

    设置oracle用户的的环境

    linux下修改环境变量(临时)

    export NLS_LANG=“SIMPLIFIED Chinese_CHINA.ZHS16GBK”

    如果是windows,按照以下方法添加或者修改,在系统变量中添加如下信息:

    变量名:NLS_LANG

    变量值:SIMPLIFIED Chinese_CHINA.ZHS16GBK

     

     

    再进行查询,字符集是不是已经更改过来了呢。

    展开全文
  • myslq 可以设置数据库级别,表级别,列级别 字符集编码; 优先级顺序为:数据库字符集 < 表字符集 < 列字符集; 也就是 上面三个级别 字符集不一致时,以 更小范围的配置为准; 例如:数据库字符集为utf8 ...

    myslq 可以设置数据库级别,表级别,列级别 字符集编码;

    优先级顺序为:数据库字符集 < 表字符集 < 列字符集;

    也就是 上面三个级别 字符集不一致时,以 更小范围的配置为准;

    例如:数据库字符集为utf8  表字符集不设置的情况下 会默认 utf8 ,如果表主动设置了编码 utf8mb4;那么表的字符集编码就为utf8MB4;

     

     

    由于会有生僻字导致 入库报错后,数据入库失败;所以决定将大部分表数据由utf8 改为utf8mb4 ,开始想到了 两个疑问:

    1、将一个表转换编码时,要是表中某个字段长度转后超过了255设置的最大长度,是表编码转换不成功,还是能成功数据会出现异常;2、编码转换后,字节长度变化了,可能导致原来能正常存储255字符的现在没法正常存储,防止部分字段原来可以存数据,现在存储长度变短,无法入库了;

     

    后来通过测试得到了答案 - 不影响;

    第一点。因 mysql 5.0版本以上,varchar(255),指的是255字符; 最大65532字节; 所以 varchar(255) 这个限制即使改变 字符集,也没有超过最大字节数,所以不会受影响;

    第二点:修改表字符集的时候,可以选择对 已存在的数据是否刷新(是否以新的字符集进行存储);或者只对 后来插入的数据生效(已存在的数据不做处理);

    语句分别如下:

    1修改表的字符集 并刷新之前已存在的数据; 可以看到 修改后已存在的三条记录受到了影响;(如果需要设置 校对规则后面增加 COLLATE 校对规则   即可)

    ALTER table table_name CONVERT to CHARACTER set  新的字符集

    2 修改表的字符集,但不对之前已存在的数据刷新;可以看到 修改后 受影响的行为 0 ;(如果需要设置 校对规则后面增加 COLLATE 校对规则   即可)

    ALTER table table_name DEFAULT to CHARACTER set  新的字符集

     

    展开全文
  • 作者:朱金灿来源:http://blog.csdn.net/clever101 在上篇文章中介绍了多...在windows的开发体系下,unicode字符字符集被称为宽字节字符集,多字节字符集被称为窄字符集。微软对unicode字符集是大力支持的。从以下几
  • oracle国家字符集与数据库字符集

    千次阅读 2017-02-10 10:02:39
    服务器端:(oracle服务器端字符集) 数据库字符集在创建数据库时指定,在创建后通常不能更改。在创建数据库时,可以指定字符集(CHARACTER SET)和国家字符集(NATIONAL CHARACTER SET)。 1. 字符集:  (1)用来存储...
  • MySQL字符集

    千次阅读 2019-06-30 21:27:10
    mysql字符集基础知识 1.什么叫字符集?常用的字符集的分类? 字符集就是字符和编码的集合,常用的中文字符集是gbk,英文字符集是ASCII 多种字符在一个字符集里,常用的UTF8 2.数据库存取数据与字符集的关系 数据库...
  • Unicode字符集和多字节字符集关系

    千次阅读 2018-07-20 11:19:17
    在计算机中字符通常并不是保存为图像,每个字符都是使用一个编码来表示的,而每个字符究竟使用哪个编码...在最初的时候,Internet上只有一种字符集——ANSI的ASCII字符集,它使用7 bits来表示一个字符,总共表示1...
  • 简介:ORACLE数据库字符集,即Oracle全球化支持(Globalization Support),或即国家语言支持(NLS)其作用是用本国语言和格式来存储、处理和检索数据。利用全球化支持,ORACLE为用户提供自己熟悉的数据库母语环境,...
  • 本文主要讨论以下几个部分:如何查看查询oracle字符集、 修改设置字符集以及常见的oracle utf8字符集和oracle exp 字符集问题。 一、什么是Oracle字符集  Oracle字符集是一个字节数据的解释的符号集合,有大小之分...
  • 输入一个字符串,字符串中包含了全量字符集和已占用字符集,两个字符集用@相连。@前的字符集合为全量字符集,@后的字符集为已占用字符集合。已占用字符集中的字符一定是全量字符集中的字符。 字符集中的字符跟字符...
  • 问题的引入:在InputStreamReader(OutputStreamWriter)的构造方法中,有指定字符集编码,那么什么是字符集?有哪些常用的字符集?怎么用字符集进行编码?   一 什么是字符集?  字符:字符(Char)是各种文字...
  • 常用字符集

    千次阅读 2019-05-22 11:18:58
    常用字符集ASCII字符集ISO 8859-1字符集GB2312字符集GBK字符集utf8字符集 ASCII字符集 共收录128个字符,包括空格、标点符号、数字、大小写字母和一些不可见字符。由于总共才128个字符,所以可以使用1个字节来进行...
  • 源文件字符集:源文件本身也是文本文件,所以源文件字符集是指源文件保存时采用哪种字符集编码。VC++下源文件默认是gbk编码,如果想要更改,可以通过 文件-高级保存选项 修改某个源文件的编码方式,似乎没有什么选项...
  • 编码字符集

    千次阅读 2021-03-09 18:43:48
    在计算机中,只有二进制的数据,不管数据是在内存中,还是在外部存储设备上。对于我们所看到的字符,也是以二进制数据的形式存在的。不同字符对应二进制数的规则,就是字符的编码。字符编码的集合称为字符集
  • vs配置选项“使用多字节字符集”和“使用Unicode字符集”的区别 VS集成开发环境,字符集选择“使用多字节字符集”和“使用Unicode字符集”的直接区别就是:编译器是否增加了宏定义——UNICODE。当选择“使用Unicode...
  • Oracle字符集 彻底搞懂 字符集

    千次阅读 2016-08-17 08:35:11
    以下是对Oracle中的字符集进行了详细的分析介绍,需要的朋友可以参考下   基本概念 字符集(Character set):是一个系统支持的所有抽象字符的集合。字符是各种文字和符号的总称,包括各国家文字、标点符号、图形...
  • 在linux系统中创建oracle数据库,选择字符集时怎么选择简体中文的UTF8数据库?尤其是在oracle rac中?我在集群环境中测试的时候点选的是UTF8,但是我还在下面下拉选项中选择的是简体中文的,中国的UTF8字符集,到...
  • ORACLE数据库字符集

    万次阅读 2019-08-09 17:47:49
    ORACLE数据库字符集 一.字符集基本知识 二、查询oracle server端的字符集 三.修改oracle的字符集 字符集基本知识 1.基本认知 ORACLE数据库字符集,即Oracle全球化支持(Globalization Support),或即国家语言...
  • 题目:有两个字符集,一个是全量字符集一个是已占用字符集,输出全量字符集中剩余的字符集。 思路:代码是大神们写的,先放在这里。其实整体的思路是挺简单的,使用一个HashMap存储字符集中各个字符以及它们的个数...
  • 字符集,字库,字符集实现

    千次阅读 2014-07-09 11:16:57
    首先字符集:有acsII和unicode 字符集实现:
  • Latex 字符集大全

    万次阅读 2018-10-06 18:14:42
    latex 字符集大全,希腊字符,数学符号,箭头……
  • Oracle字符集的查看查询和Oracle字符集的设置修改
  • 有的时候我们在迁移数据库的时候发现由于字符集的问题导致迁移不成功,比如之前做expdp/imdp迁移的时候 , 源库是UTF8字符集,目的库是AL32UTF8字符集,由于汉字在AL32UTF8 中占3个字节,而在ZHS16GBK中占2个字节,...
  • C++中处理字符集与常见字符集介绍

    千次阅读 2019-03-11 09:40:17
    C++提供不同的字符类型用以应付前述字符集: ·char可被用于所有8bit以下的字符集,例如US-ASCII、ISO-Latin-1和ISO-Latin-9。此外它可被用于UTF-8的8bit值。 ·char16_t(始自C++11)可被用于UCS-2,也可用于UTF-16...
  • 设置数据库的字符集和设置表字段字符集的区别是什么?设置了数据库的又没统一把所有表字段设置,怎么统一修改表字段字符集呢???
  • 结合Java详谈字符编码和字符集

    万次阅读 多人点赞 2018-07-07 14:04:45
    字符编码和字符集是两个基础性的概念,很多开发人员对其都并不陌生,但是很少有人能将其讲得很准确。当应用出现乱码时,如何分析和定位原因,很多人仍是一头雾水。这篇文章,将从字符编码和字符集的相关概念开始讲解...
  • 数据库字符集(ZHS16GBK)和客户端字符集(2%)是不同的,字符集转化可能会造成不可预期的后果   不管错误信息中你的数据库字符集是什么,都是由于数据库服务端和你的客户端字符集不统一造成的。   影响...
  • 文章目录参考资料:字符集级别服务器字符集和校对数据库字符集和校对表字符集和校对列字符集和校对连接字符集和校对字符串文字字符集和校对查看字符集设置使用GUI工具使用命令行设置默认字符集配置文件命令行重启...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 88,651
精华内容 35,460
关键字:

字符集