`

空格有两个ascii值36和160

阅读更多

     空格的ascii码值是多少?今天之前,我的回答肯定是0x20(十进制就是36)。但今天碰到的一个问题让我对空格有了新的认识。空格的ascii码还可能是160。

    碰到的问题是这样的:在某一文章页面中,发现存在一个包含空格的标签(手机 随拍),点击这个标签却搜索不到这篇文章 。这篇文章是从手机上发布的,随即试了从PC上发布文章发现是正常的。检查PC上和手机上发布文章的标签数据,发现:PC上发布的标签的空格的UTF8编码是两个字节0xc2a0,结合前一篇文章(NodeJS笔记:处理非utf8编码)的编码知识,得知对应的Unicode code point为U+00A0;手机上发布的标签的空格的UTF8编码是单字节的0x20,计算得对应的Unicode code point为U+0020。这样看来,两边发布的空格的unicode不一致。日志页面上tag的链接被URLEncoder编码过了,unicode为0x20的空格被编码成了'+',但是后端拿到这个+时却没法进行自动解码(+是合法的URL的一部分?),直接当成'+'了,相当于在搜索'手机+随拍',这样肯定是得不到正确的结果的。再来看一下PC直接发布的unicode为0xA0的空格,被URLEncoder后变成%C2%A0(utf8格式),传到后端自动还原成值为0xA0的空格,这样就避免了该问题。

    这个问题从后端来看,是因为unicode为20的空格没可逆地与'+'号进行转换导致的,与具体的应用服务器有关。即空格转化成+传到前端后,前端传给后端的+没有自动地进行转化成相应空格。可通过对标签进行强制URLDecoder来解决。

    再来看看浏览器是怎么产生unicode值为0xA0的空格的。经过分析与测试发现,无论是移动端浏览器还是PC浏览器,用户在input或者textarea敲空格键输入的‘空格字符’都是unicode值为0x20的空格。但是如果设置某节点.innerHTML=' ',再通过这个节点.innerText获取其内容,将会取到unicode值为0xA0的空格。即可见0XA0与 存在某种对应关系,在ajaxer的博客扒到一张好图刚好证明了这一点,他的这篇文章提到了0xA0在OP下的一个bug:innerHTML拿到的 变成了0xA0:

 

    再来总结一下:空格的ascii码值有两个:从键盘输入的空格ascii值为0x20;从网页上的 字符转化而来的空格ascii值为0xA0

 

引自:http://nodejs.lofter.com/post/3c14e_85efc

分享到:
评论

相关推荐

    KeyCode和KeyAscii对照值

    `KeyCode`和`KeyAscii`是两种用来标识键盘按键的方式,它们在不同的场景下有着各自独特的用途。本文将深入探讨`KeyCode`和`KeyAscii`的概念及其之间的区别,并通过具体示例来展示它们的使用方法。 #### 二、KeyCode...

    常用字符的ASCII值1

    在表1-1中,我们可以看到一些常用字符的ASCII值,这些值分为两个部分:十进制(Dec)和十六进制(Hex)。对于字符编码的理解,这两个数值系统都非常关键。十进制是我们日常生活中最常用的计数方式,而十六进制在...

    ASCII和hex互转工具

    描述中提到的“hex端填的时候需要加上空格”,这是指在输入或显示十六进制数值时,为了方便阅读和理解,通常会在每两个十六进制数字之间添加空格。例如,十六进制数"414243"(代表ASCII字符串"ABC")可以写成"41 42 ...

    字符串比较问题对于长度相同的2 个字符串A和B,其距离定义为相应位置字符距离之和。2 个非空格

    在字符串A 和B 的所有长度相同的扩展中,有一对距离最小的 扩展,该距离称为字符串A和B的扩展距离。 对于给定的字符串A和B,试设计一个算法,计算其扩展距离。 ?编程任务: 对于给定的字符串A和B,编程计算其...

    ASCII码表pdf版

    ASCII码表包含了两个主要部分:**控制字符**和**可显示字符**。 ##### 1. 控制字符 控制字符主要用于定义传输控制指令,通常不直接显示在屏幕上,而是用于控制打印机、终端或其他计算机设备的行为。 - **NUL (空...

    ASCII码说明表

    例如,空格的ASCII值为32,大写字母A的ASCII值为65,小写字母a的ASCII值为97。控制字符主要用于早期的通信和打印机设备,它们不直接对应于可见的图形字符,而是执行特定的控制功能,如换行、回车等。 控制字符包括...

    完整的正确的ASCII碼對照表

    1. 字符比较:在判断两个字符是否相等时,可以直接比较它们的ASCII值。 2. 字符输出:在打印或显示字符时,可以使用ASCII值作为参数传递给输出函数。 3. 输入处理:读取用户输入时,可以将输入的ASCII值转换回相应的...

    1到127之间的ASCII表

    例如,程序员可以利用ASCII值的比较来进行字符的排序,或是判断两个字符是否相同。某些编程语言,如C语言,提供了简单直接的函数来输出特定的ASCII字符。比如在C语言中,通过调用`printf("%c", 65);`这个函数,就...

    ASCII表

    其他常见的字符如空格(ASCII值32),感叹号(ASCII值33),问号(ASCII值63)等也都有各自的ASCII值。 除了基本的7位ASCII码,还有扩展的ASCII码,它使用8位二进制,能够表示256个字符,通常包括更多的非英文字符...

    ASCII码与字符转换.rar

    ASCII码的转换主要涉及两个方向:数字到字符和字符到数字。将数字转换为字符通常通过查找ASCII表完成,反之则需要知道字符对应的ASCII值。例如,如果有一个整数65,我们可以通过将它转换为二进制(01000001)并解释...

    C#程序用于ASCII和HEX转换工具源代码

    2. 转换逻辑:这是程序的核心部分,包括ASCII转HEX和HEX转ASCII两个方向。ASCII转HEX涉及到将每个字符的ASCII值转换为对应的十六进制表示;反之,HEX转ASCII则需要解析十六进制字符串并将其转换为相应的字符。 3. ...

    ascii字符集(DOC)

    每个字符都对应一个唯一的ASCII值,例如,空格的ASCII值是32,大写字母A的ASCII值是65,小写字母a的ASCII值是97。 2. **扩充ASCII字符集** 随着国际化的需要,标准ASCII字符集不能满足所有语言的字符表示,因此有...

    字符编码笔记:ASCII,Unicode和UTF-8

    - **区分Unicode与ASCII**:计算机如何判断一系列二进制数据代表的是单个Unicode字符还是多个ASCII字符? - **存储效率**:Unicode字符长度可变,对于只包含英文字符的文本来说,如果每个字符都使用相同的固定长度...

    String-to-ASCII-String.zip_ ASCII LABVIEW_LabView ASCII

    这个VI通常包含一个字符串输入端口、一个ASCII值输出数组端口,以及可能的配置选项,如是否保留空格或者特殊字符。 在`String to ASCII String.vi`这个子VI中,可以看到LabVIEW的图形化编程界面,其中包含前面板和...

    ASCII 对照表 C语言开发必备

    ASCII对照表是程序员的常用工具,它列出了所有128个ASCII字符及其对应的数值。在开发过程中,对照表可以帮助快速查找特定字符的ASCII值,或者根据给定的数值找出相应的字符。例如,如果需要检查某个字符是否为空格,...

    ASCii字库8x16

    每两个十六进制数代表一个字符的一个列的数据,0表示不发光的像素点,非0值表示发光的像素点。对于8x16点阵,意味着每个字符由两行组成,每行包含8个像素点,共16个十六进制数表示一个完整的字符。 ### 具体字符...

    ascii查询工具

    4. **转换**:ASCII查询工具可以实现ASCII值和字符之间的相互转换,这对于理解和处理文本数据非常有用。 5. **扩展ASCII**:有些系统使用8位的ASCII,增加了额外的128个字符,形成256个字符的扩展ASCII,通常用于...

    ascii.rar_ASCII转换

    ASCII码,全称为美国标准信息交换代码(American Standard Code for Information Interchange),是计算机系统中...通过"ascii.cpp"和"www.pudn.com.txt"这两个文件,我们可以深入学习和实践ASCII码的查询和转换技巧。

Global site tag (gtag.js) - Google Analytics