ANSI/UTF-8/UCS2(UTF-16),以及回车换行

最近遇到一个linux 平台上invisible character (0x1d)引起的数据装载失败问题,正好借此机会整理一下字符编码的相关知识。

 

回车/换行:

=================

顾名思义,回车和换行是两个不同的控制字符:

    -回车(Carriage Return)即\r,ascii码13(0x0d),作用是将光标移到一行的开始位置

    - 换行(LineFeed)即\n,ascii码10(0x0a),作用是将光标移到下一行

在不同的操作系统平台上,默认是用不同的控制符来标志一行的结束:

    -Windows: \r\n

    -Linux/Unix: \n

    - Mac: \r(据说近来也改成了\n)

这种不同实现导致的结果就是Winodws上的标准文本文件在其它平台上会多出一个^M控制符,而其它平台的文件在Windows上看会只有一行。Linux上有dos2unix/unix2dos命令来解决文本换行的问题。

 

字符编码:

=================

文字是人类的语言,对于计算机来讲,语言就是0和1而已,因此将字符保存在计算机里就会涉及到字符编码的问题。网上有许多文章和博客介绍不同字符编码方式,这里就不引用了。列一些我自己理解的重点:

ASCII:ANSI

最初的计算机存储有限,字符的存储使用的是8位的ASCII码(最高位为0),最多可以存储128个字符,加上扩展ASCII码(最高位为1)也只能存储256个字符。于是,各国都制定了自己的兼容ascii编码规范,就是各种ANSI码,来表示不同的语言中的不同文字。于是同样的ASCII码在不同的字符集(Collation/CharSet/CodePage)上就可以表示不同的字符,这就是为什么ANSI字符一定要与特定的Collation绑定才能表示唯一正确的字符,绑定错了就可能出现乱码(ascii码小于128的字符不会乱码)。

 

Unicode

又名万国码,所有语言的所有字符都可以用唯一的Unicode码来标识。Unicode有几种不同的实现方式:

    - UTF-8:按照字节(8位)来存储编码,长度可变(1~6字节)。完全兼容ascii码,即标准ascii码中的字符在unicode中也是以相同的码来表示的。UTF-8使用第一个字节确定字节数:第一个字节首为0即一个字节,110即2字节,1110即3字节,字符后续字节都用10开始。

   - UTF-16 (UCS2):按照双字节存储字符,因此有字节序问题:即高位在前(Big Endian)还是低位在前(LittleEndian)。这个行为与CPU处理字节方式有关,一般LittleEndian用得比较多。比如“汉”字,Unicode码为0x6C49,按照Big Endian存储就是6C49,LittleEndian则为496C。

 

如何区分不同编码的文件:

用UltraEdit或者类似编辑器打开文本文件,切换到HexMode(ctrl + h),看文件头:

   - 没有任何特殊文件头的,直接第一个字符就是文本内容的,是ansi文件

   - 以BOM (Byte Order Mark) 开头的是Unicode文件。BOM可以是0xFEFF(表示BigEndian)、0XFFFE(表示Little Endian)、或者0xEFBBBF (UTF-8)。

 

注意,在Windows上用Notepad保存一个UTF-8的文件,用UltraEdit查看也可能以0xFFFE开头,这是因为UltraEdit可能自动将UTF-8的文件转换成UTF-16格式。如果通过UltraEdit打开文件查看BOM来确定文件格式,并不是安全的。UltraEdit下方状态栏则真实的显示了当前打开文件的实际编码格式,而不是当前编辑的编码格式。对于一个普通Ascii 格式的文件,它显示为DOS或者UNIX,对于一个包含有UTF-8编码字符的文件,它显示为U8-DOS或者U8-UNIX,对于UTF-16编码的文件,它显示为U-DOS 或者U-UNIX。

 

我们知道,UTF-8 对于Ascii 字符的编码与原有的Ascii 编码一致,因此假如我们删除了一个UTF-8DOS文件中所有Ascii 以外的字符,保存后再打开,UltraEdit 将显示为DOS(Ascii)。

如果我们不希望UltraEdit 在打开UTF-8 文件时自动转为UTF-16格式编辑,我们可以修改配置。如下图,确保“自动检测 UTF-8文件”不被选中。

字符编码: <wbr>ANSI/UTF-8/UCS2(UTF-16),以及回车换行

需要注意的是,如果取消了这个选项,UltraEdit打开包含UTF-8编码的文件会产生乱码。

UltraEdit 在File-Convertions菜单中提供了多种编码格式之间的转换,这将影响到保存的文件编码,转换后,在状态栏也能看到相应变化。在有些选项后标明有(UnicodeEditing) 或者(ASCII Editing),这指定了编辑时显示用的编码,并不影响保存文件所用的编码,要区分开。

工具WinHex 可以用来查看文件16进制内码。

 

Unicode与SQL Server:

================

UTF-8是目前使用最广泛的Unicode编码格式,但是SQLServer使用的是UTF-16作为Unicode字符的编码格式,即NCHAR/NTEXT/NVARHCAR存储的都是双字节编码的Unicode字符,以N为前缀(比如N'Hello')的字符串即为双字节Unicode字符。对于UTF-8字符串,如果它只包含ANSI字符,则可以按照ANSI串处理;否则的话必须将UTF-8串转换成UTF-16、再交给SQLServer 处理。这种行为可能带来两个常见的问题:

   - 许多程序(包括ASP.NET)在输出文件的时候都使用UTF-8格式。如果这些文件需要被SQLServer正确地处理,必须进行转码至UTF-16。

   - SQL 2005以后支持对NativeXML进行处理,但是如果XML文档本身是UTF-8编码,就没办法直接处理。下面是一个例子:

    在SSMS中运行如下代码,会得到错误9420:

   DECLARE @InfXML      
   SET    @Inf = '<?xml version="1.0"encoding="utf-8"?>
                    <root>
                       <names>
                            <name>张三</name>
                        </names>
                        <names>
                            <name>李四</name>
                        </names>
                    </root>
                   ' 
     
   SELECT  x.value('name[1]', 'VARCHAR(10)') ASName 
   FROM   

转载于:https://www.cnblogs.com/xieyuan/archive/2012/08/23/3787476.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/494755.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

自动驾驶的大脑——芯片简介

来源&#xff1a;智车科技汽车电子发展初期以分布式ECU架构为主流&#xff0c;芯片与传感器一一对应&#xff0c;后来&#xff0c;中心化架构DCU、MDC逐步成为了发展趋势&#xff1b;随着汽车辅助驾驶功能渗透率越来越高&#xff0c;传统CPU算力不足过去&#xff0c;在自动驾驶…

MySQL流浪记(四)—— DDL和DML区别与介绍

DDL与DML的区别 DDL&#xff1a;数据定义语言&#xff0c;对于数据库、表、图、索引等进行操作。 具体操作有&#xff1a;CREATE&#xff08;创建&#xff09;、ALTER&#xff08;修改&#xff09;、DROP/TRUNCATE&#xff08;删除&#xff09; DML&#xff1a;数据操纵语言&am…

数据仓库面试题集锦(附答案和数仓知识体系)

【数据仓库系列文章 - 传送门】 一篇文章搞懂数据仓库&#xff1a;三种事实表&#xff08;设计原则&#xff0c;设计方法&#xff09;一篇文章搞懂数据仓库&#xff1a;三种事实表&#xff08;设计原则&#xff0c;设计方法、对比&#xff09;_不吃西红柿-CSDN博客_事实表三种…

pidgin-qq可以使用QQ2012协议了

前几个月前还用过pidgin-qq登录过QQ&#xff0c;当时用的还是2010协议。可不久就发现2010协议已经变得不可用了&#xff0c;之后也尝试过各种webqq协议的方案&#xff0c;什么gtkqq,pidgin-lwqq,可能是webqq协议功能不完善吧&#xff0c;用起来总觉得跟我想要的qq功能相差太远。…

2018全球科技中心报告

来源&#xff1a;CB Insights、数据局摘要&#xff1a;CB Insights 近日发布的《全球科技中心报告》&#xff08; Global Tech Hubs report&#xff09;在全球范围一共遴选了25座城市作为「全球科技中心」&#xff0c;其中&#xff0c;中国仅有北京和上海入选&#xff0c;而热门…

还在为520礼物发愁吗?教你用python撩女朋友

用python撩女朋友&#xff0c;你要的温暖都在生活的细节中。学会制造惊喜&#xff0c;一起牵手走向更加美好的生活。 其实&#xff0c;大多数人的爱情都是有事没事的瞎扯&#xff0c;可对于我们该怎样瞎扯来表达自己的心意却又都摸不着头脑。 所以&#xff0c;情侣之间要学会一…

键盘上的反引号怎么打

今天在学习数据库的时候突然要用到反引号&#xff0c;反引号&#xff1f;第一次听说反引号这个符号 几经周折&#xff0c;找到这个反引号&#xff0c;分享给大家。 在英文状态下&#xff0c;数字1的左边&#xff0c;Esc的下面&#xff0c;也就是中文的省略号。

(转)用 Asterisk 搭建自己的免费 VoIP 服务器

原文链接&#xff1a;http://www.yaoblog.info/?p5021 1. 这里以 Debian 为例子&#xff0c;安装 Asterisk apt-get update apt-get install asterisk 2. 预设置 Asterisk&#xff0c;修改 sip.conf 和 extensions.conf 文件&#xff0c;是为了创建两个可供测试的 SIP 账号 na…

解密美国五角大楼人工智能中心

选自 I thebulletin 编译 I 网易智能 参与 I Rosie2016年10月&#xff0c;新成立的国防创新委员会首次提出了一系列建议&#xff08;该委员会是美国国防部高级领导的顾问机构&#xff0c;成员包括来自私营部门、学术界和非营利组织的代表&#xff09;。其中一项建议是&#xff…

一篇文章搞定一个大数据组件:kudu知识点全集

目录 1、kudu的定位 2、kudu基本概念 3、存储架构 3.1 储存架构&#xff1a;Tablet 3.2 储存架构&#xff1a;RowSets 3.3 储存架构&#xff1a;DiskRowSets 4、kudu工作原理 4.1 Compaction 4.2 Tablet切分规则 4.3 kudu写过程&#xff1a;insert 4.4 kudu写过程&a…

区分Activity的四种加载模式-activity

转载&#xff1a;http://marshal.easymorse.com/archives/2950 在多Activity开发中&#xff0c;有可能是自己应用之间的Activity跳转&#xff0c;或者夹带其他应用的可复用Activity。可能会希望跳转到原来某个Activity实例&#xff0c;而不是产生大量重复的Activity。 这需要为…

Nature:AI为什么总是歧视重重?

来源&#xff1a;网络大数据摘要&#xff1a;当使用谷歌翻译将西班牙语的新闻翻译为英语时&#xff0c;涉及到女性的短语通常都会翻译为“他说”或“他写道”。当使用谷歌翻译将西班牙语的新闻翻译为英语时&#xff0c;涉及到女性的短语通常都会翻译为“他说”或“他写道”。常…

※【python自学】7个Python生态系统核心库,你值得拥有

无论你是想快速入手Python&#xff0c;还是想成为数据分析大神或者机器学习大佬&#xff0c;亦或者对Python代码进行优化&#xff0c;本文的python库都能为你提供一些帮助。 一 概述 Python生态系统的一些核心基础数据分析库&#xff1a; NumPy&#xff1a;支持大量的维度数…

Eclipse编写Java程序

Eclipse的Java开发工具(JDT),允许用户使用它的环境进行编辑、调试及运行Java程序。1. Java运行环境设置 指定JRE的版本。Eclipse设置默认的运行环境的JRE设置成当前配置&#xff0c;用户可以修改多个JRE版本的运行环境&#xff0c;并选择符合其需求的运行环境。[窗口 Window]…

㊙️【教你用python挣零花钱】自动化简历内推,学弟直呼牛逼!!

最近&#xff0c;小编在处理简历时&#xff0c;发现大量简历需要一个个打开文件&#xff0c;复制姓名、邮箱、电话号码、学历等关键信息&#xff0c;效率特别低且部分文件无法直接复制。于是&#xff0c;小编便写了简历解析处理的脚本&#xff0c;支持文件格式有&#xff1a;do…

MySQL流浪记(六)—— CONCAT到GROUP_CONCAT的沿途风景(图文详解)

本文中的案例如下&#xff0c;可以自己测试一下&#xff0c;有问题可以留言哦。 CREATE TABLE staff (id INT PRIMARY KEY AUTO_INCREMENT,name VARCHAR(50),job_id INT, joindate DATE,salary DECIMAL(7,2) ); INSERT INTO staff(name,job_id,joindate,salary) VALUES (孙悟…

收藏!最新大数据产业地图 十大生态金矿百大公司起底【附下载】

来源&#xff1a;智东西人工智能的崛起&#xff0c;加速了大数据技术的应用落地。据中国大数据产业生态联盟调查显示&#xff0c;国内大数据企业年营业额4000万人民币以上的已经超过40%&#xff0c;这意味着&#xff0c;这些企业已经度过生存期&#xff0c;开始进入应用落地和品…

【一鸣离职,左晖去世】互联网老兵给大家的三个建议

2021年5月20日&#xff0c;除了娱乐圈的分分合合&#xff0c;互联网圈发生了两件大事&#xff1a; 1、字节跳动创始人张一鸣发布内部全员信&#xff0c;宣布卸任CEO一职。 2、贝壳发布讣告&#xff0c;公司创始人兼董事长左晖先生因疾病意外恶化于2021年5月20日…

科大讯飞:让世界听见AI的声音

来源&#xff1a;华为怀揣着“让世界聆听我们的声音”的梦想&#xff0c;科大讯飞依托世界领先的核心技术&#xff0c;引领智能浪潮&#xff0c;服务亿万用户&#xff0c;从中国语音产业的拓荒者一跃成为世界人工智能产业的领军者&#xff0c;而最初科大讯飞把语音作为切入点却…

Linux中的chmod详解

chmod&#xff08;英文全拼&#xff1a;change mode&#xff09;命令是控制用户对文件的权限的命令。Linux/Unix 的文件调用权限分为三级 : 文件所有者&#xff08;Owner&#xff09;、用户组&#xff08;Group&#xff09;、其它用户&#xff08;Other Users&#xff09;。只有…