字符编码

字符编码--第3章 字符的存储--EUC(1991年)

本小妞迷上赌 提交于 2020-01-07 18:44:58
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 第2节 EUC EUC全名为Extended Unix Code,是一个使用8位编码来表示字符的方法。EUC最初是针对Unix系统,由一些Unix公司所开发,于1991年标准化。EUC基于ISO/IEC 2022的7位编码标准,因此单字节的编码空间为94,双字节的编码空间(区位码)为94x94。把每个区位加上0xA0来表示,以便符合ISO 2022。它主要用于表示及储存汉语文字、日语文字及朝鲜文字。 EUC定义了4个单独的码集(code set)。码集0总是对应于7位的ASCII(或其它的各国定义的ISO 646),包括了ISO 2022定义的C0与G0空间的值。码集1, 2, 3表示G1空间的值。其中,码集1表示一些未经修饰(unadorned)的字符。码集2的字符编码以0x8E(属于C1控制字符,或称SS2)为第一字节。码集3的字符编码以0x8F(另一个属于C1的控制字符,或称SS3)为第一字节。码集0总是编码为单字节;码集2、3总是编码为至少2个字节;码集1编码为1-3个字节。 1.EUC-CN EUC-CN是GB 2312最常用的表示方法。浏览器编码表上的“GB2312”,通常都是指“EUC-CN”表示法。 ASCII字符,范围为0x21-0x7E,直接用单字节表示。这是码集0。 GB

Qt开发中文显示乱码

折月煮酒 提交于 2020-01-07 16:04:39
Qt开发中文显示乱码 来源 https://www.jianshu.com/p/ed269df8104d 参考 https://blog.csdn.net/J_H_C/article/details/93882284 为什么会出现乱码 首先,我们需要有的概念是 乱码的问题是由编码和解码方式引起的 。涉及到编码方式的地方有3个: 源码字符集 执行字符集 运行环境字符集 源码字符集(the source character set):源码文件时使用何种编码格式保存的。 执行字符集(the execution character):可执行程序内保存的是何种编码(程序执行时内存中字符串编码) gcc 运行字符集设置参数 -finput-charset=charset //设置源码字符集为charset -fexec-charset=charset //设置执行字符集为charset -fwide-exec-charset=charset //设置宽字符串的执行字符集为charset msvc 运行字符集设置参数 -execution-charset:utf-8 // 指明程序执行时使用UTF-8字符集 -source-charset:utf-8 // 指明源码文件的编码为UTF-8字符集 源码字符集确切的说是编译器认为源码文件的编码方式,执行字符集是可执行程序采用的编码方式

源码必须是UTF-8,QString需要它

妖精的绣舞 提交于 2020-01-07 15:51:32
源码必须是UTF-8,QString需要它 来源 https://www.qt.io/cn/blog/2012/05/16/source-code-must-be-utf-8-and-qstring-wants-it Published on Wednesday May 16, 2012 by Debao Zhang in C++ Qt qtearth-blogs-chinese | Comments 原文链接: Thiago Macieira - Source code must be UTF-8 and QString wants it 先前 我讨论过源代码的编码问题,认为C++语言缺少一个必要的基本设置。尽管如此,从本周一开始,在某种程度上,Qt5现在已开始强制要求源代码必须是UTF-8。 将QString的8-bit成员函数所用的编码改为UTF-8的提交(commit)终于融入到 qtbase代码仓库 中。这正是我们为Qt5所规划的,从Robin Burchell移除 QTextCodec::setCodecForCStrings 开始的,一系列变更(changes)画上了完美的句号。但明确一点:QString内部仍采用UTF-16存储数据且不会改变。 为了理解这个变更是什么,我们需要回顾一点点历史。四年前, 我写了一篇叫做“字符串理论(String Theory)”的博客

SQL Server中Text、varchar(max)和varbinary(max)数据类型区别

我的未来我决定 提交于 2020-01-07 15:41:57
以前只知道text和image是可能被SQL Server淘汰的数据类型,但具体原因不太清楚,今天读书的时候发现了text与varchar(max)和nvarchar(max)的区别,主要是对操作符的限制,text只能被下列函数作用: 函数 语句 DATALENGTH READTEXT PATINDEX SET TEXTSIZE SUBSTRING UPDATETEXT TEXTPTR WRITETEXT TEXTVALID 举个列子,如果“文本”这一列的数据类型为text,那么它将不能用于“=”“left()”等操作,比如下面的例子: 建立表,填充数据: if exists ( select * from sysobjects where id = OBJECT_ID ( '[asdf]' ) and OBJECTPROPERTY ( id , 'IsUserTable' ) = 1 ) DROP TABLE [asdf] CREATE TABLE [asdf] ( [inttest] [int] IDENTITY ( 1 , 1 ) NOT NULL , [text] [text] NULL , [varcharmax] varchar(max) NULL ) ALTER TABLE [asdf] WITH NOCHECK ADD CONSTRAINT [PK_asdf]

转义、编码和加密

╄→гoц情女王★ 提交于 2020-01-07 06:24:19
转义、编码和加密是开发中很常见也很基础的概念。对于初学开发的开发者,可能有时会无法准确的区分着几个词。我们将通过这篇文章来了解一下“转义、编码和加密”这几个词的关联和区别。 转义 第一种转义场景 绝大多数的开发者都曾经在自己学习第一个编程语言时,就遇到了这个概念。以经典的C语言中字符串中的字符转义为例。 如果在一个字符串中存在一个 " ,那么就需要在 " 前添加 \ 才能够正常的表示,比如下面这样。 char* universal_law = "月老板说:\"世界上本也不存在'银弹'。一套框架解决不了所有问题。\"" 之所以需要这样,是因为对于字符串来说, " 本身就是表示一个字符串的起止符号。如果不进行转义,那么编译器将无法正确的识别其中的 " 哪些是分隔符,哪些是字符串内部的 " 。 所以,第一种需要转义的场景就是:如果不进行转义就可能与语法规定的某些内容产生混淆,所以这些内容都被设计为需要转义。 基于这种场景,可以在很多的编程语言和概念中找到这种场景的体现: java String honor = "月老板-\"赛博坦首席技术官\""; 对 " 进行转义 C# var proverbs = "月老板:\"这里不要写死,下次需求必改\""; 对 " 进行转义 XML <nb>月老板的衬衫价格>99磅6便士</nb> > 是对 > 的转义, > 是XML的边界符 正则表达式 \d

MySQL之创建数据库

牧云@^-^@ 提交于 2020-01-06 20:57:04
1、创建数据库create database或CREATE DATABASE //数据库无大小写之分 create database <basename> 或 CREATE DATABASE <BASENAME> 或create database if not exists <basename> [[default] character set <字符集名> ] [[ DEFAULT ]CHARACTER SET <字符集名>] [[default ]collate <校对规则名> ] [[DEFAULT] COLLATE<校对规则名>] [ ]中的内容是可选的。语法说明如下: <数据库名>:创建数据库的名称。MySQL 的数据存储区将以目录方式表示 MySQL 数据库,因此数据库名称必须符合操作系统的文件夹命名规则,注意在 MySQL 中不区分大小写。 IF NOT EXISTS:在创建数据库之前进行判断,只有该数据库目前尚不存在时才能执行操作。此选项可以用来避免数据库已经存在而重复创建的错误。 [DEFAULT] CHARACTER SET:指定数据库的默认字符集。 [DEFAULT] COLLATE:指定字符集的默认校对规则。 MySQL 的字符集(CHARACTER)和校对规则(COLLATION)两个不同的概念:字符集是用来定义 MySQL 存储字符串的方式

Oracle 字符集的查看和修改

ぐ巨炮叔叔 提交于 2020-01-06 18:35:40
Oracle 字符集的查看和修改 一、什么是 Oracle 字符集 Oracle字符集是一个字节数据的解释的符号集合,有大小之分,有相互的包容关系。ORACLE 支持国家语言的体系结构允许你使用本地化语言来存储,处理,检索数据。它使 数据库 工具,错误消息,排序次序,日期,时间,货币,数字,和日历自动适应本地化语言和平台。 影响Oracle数据库字符集最重要的参数是NLS_LANG参数。 它的格式如下: NLS_LANG = language_territory.charset 它有三个组成部分(语言、地域和字符集),每个成分控制了NLS子集的特性。 其中: Language: 指定服务器消息的语言, 影响提示信息是中文还是英文 Territory: 指定服务器的日期和数字格式, Charset: 指定字符集。 如:AMERICAN _ AMERICA. ZHS16GBK 从NLS_LANG的组成我们可以看出,真正影响数据库字符集的其实是第三部分。 所以两个数据库之间的字符集只要第三部分一样就可以相互导入导出数据,前面影响的只是提示信息是中文还是英文。 二.字符集的相关知识: 2.1 字符集 实质就是按照一定的字符编码方案,对一组特定的符号,分别赋予不同数值编码的集合。Oracle数据库最早支持的编码方案是US7ASCII。 Oracle的字符集命名遵循以下命名规则:

美团面试官问我一个字符的String.length()是多少,我说是1,面试官说你回去好好学一下吧

牧云@^-^@ 提交于 2020-01-06 18:17:56
【推荐】2019 Java 开发者跳槽指南.pdf(吐血整理) >>> 本文首发于微信公众号:程序员乔戈里 public class testT { public static void main(String [] args){ String A = "hi你是乔戈里"; System.out.println(A.length()); } } 以上结果输出为7。 小萌边说边在IDEA中的win环境下选中String.length()函数,使用 ctrl+B快捷键 进入到String.length()的定义。 /** * Returns the length of this string. * The length is equal to the number of <a href="Character.html#unicode">Unicode * code units</a> in the string. * * @return the length of the sequence of characters represented by this * object. */ public int length() { return value.length; } 接着使用 google翻译 对这段英文进行了翻译,得到了大体意思:返回字符串的长度,这一长度等于字符串中的

xshell中文乱码问题

别说谁变了你拦得住时间么 提交于 2020-01-06 02:29:16
今天领导给我一台linux服务器让我部署一个程序,部署完了启动后查看日志发现中文全是乱码,于是按照常规的设置xshell的编码  (1)在工具栏的“编码”中设置UTF-8,不起作用  (2)在“文件-属性-终端-编码”中设置UTF-8、GBK也不起作用 此时查看网上的资料,修改linux的字符集,修改 /etc/sysconfig/i18n 文件不起作用,执行export LANGUAGE=zh_CN.GB18030:zh_CN.GB2312:zh_CN也不好使,执行locale命令查看字符集还是纹丝不动,最后采用如下方法: (1)执行vim /etc/profile,在文件中加入这两句话:   export LC_ALL=en_US.UTF-8    export LANG=en_US.UTF-8 (2)执行source /etc/profile刷新profile配置文件 (3)执行locale,查看系统字符集, 好使了 , 来源: https://www.cnblogs.com/yby-blogs/p/6529381.html

Visual Studio 默认保存为UTF8编码

天涯浪子 提交于 2020-01-06 00:42:42
Visual Studio (中文版)默认保存的文本文件是 GB2312 编码(代码页936)的,默认的行尾(End of line)是CRLF的。 如果仅仅是在windows下开发问题也不大,但是涉及到跨平台开发的时候,就不是很满意了。 VS本身的 文件 -> 高级保存选项 中是可以选择保存的编码和行尾的,但是不支持为默认的。 还有一个问题是 cl 编译的时候,对 utf-8 格式支持不好(需要添加 /source-charset:utf-8 选项,默认是当作本地字符集的),对于带 BOM 标记的文件则没有问题。 所以我们在项目中统一规定使用 UTF-8 with BOM 编码,行尾为 LF (\n)。 这里介绍两个插件 ForceUTF8 (with BOM) 这个插件还有两个版本,一个是带 BOM 的,一个是不带的。 插件是开源的,代码很简单。就是在文档保存的时候,判断是否是文本文件。如果是的话,那就先转编码为 UTF-8 with BOM ,再写入文件。 下载地址 https://marketplace.visualstudio.com/items?itemName=jz5.ForceUTF8withBOM 其实可以直接在这个项目上改,在保存文件前把 \r\n 、 \r 、 \n 都替换为 \n 即可(要注意替换次序)。 Line Endings Unifier