异常空格,ASCII (194,160)问题

今天遇到了个异常空格的问题,与:http://www.cnblogs.com/wangyuyu/p/3711887.html 一致。

写了两行hive语句,看起来完全一样,但是就是一个可以执行,一个不可以。diff出两者不同,但是死活看不出来。

后来发现,由于一个是从qq中copy到onenote中再copy出来的,可能中间发生了转化。具体见下。

-------------------------------------------------------------

今天运营的同学反映有一些店铺的名称后面带空格,我下意识的说不可能啊,我已经处理过了啊。然后就找出来看。

其中有个店铺的名称是“安踏 ”,第一眼看上去好像是带了个空格。然后我就仔细的看了下。

  

1  pry(main)> "安踏 ".strip
2 => "安踏 "

竟然没有变化。

1 pry(main)> "安踏 "[-1] == " "
2 => false

怪不得,原来不是一个空格。

到底是什么呢? 对,查一下ascii码

1 pry(main)> " ".bytes
2 => [32]

空格的ascii 是32

1 pry(main)> "安踏 "[-1].bytes
2 => [194, 160]

这个竟然是194,160. 原来如此。

  原因是字符串中的一个空格(ASCII:32)被UTF-8编码之后变成了字符(ASCII:194 和 160的组合)。在 UTF-8编码里面存在一个特殊的字符,其编码是“0xC2 0xA0”,转换成字符的时候表现为一个半角空格,跟一般的半角空格(ASCII 0x20)不同的是它的宽度不会被压缩,所以排版中常能用到它。但是GB2312、Unicode之类并没有这样的字符,所以转换后前台会显示为“?” 号,只是显示为问号而不是真正的问号,所以无法被替换。

 

解决方法是:

1 Shop.each do |shop|
2    if shop.name.include?(" ")  
3      shop.name = shop.name.split(" ")[0]    
4      shop.save
5   end  
6 end 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
别的不多说了 非常好的东西 等待有缘人 摘录目录如下 Google C++ 风格指南 - 中文版 目录 译者前言 背景 1. 头文件 1.1. #define 保护 1.2. 头文件依赖 1.3. 内联函数 1.4. -inl.h文件 1.5. 函数参数的顺序 1.6. #include 的路径及顺序 译者 (YuleFox) 笔记 2. 作用域 2.1. 名字空间 2.1.1. 匿名名字空间 2.1.2. 具名的名字空间 2.2. 嵌套类 2.3. 非成员函数, 静态成员函数, 和全局函数 2.4. 局部变量 2.5. 静态和全局变量 译者 (YuleFox) 笔记 3. 类 3.1. 构造函数的职责 3.2. 默认构造函数 3.3. 显式构造函数 3.4. 拷贝构造函数 3.5. 结构体 VS. 类 3.6. 继承 3.7. 多重继承 3.8. 接口 3.9. 运算符重载 3.10. 存取控制 3.11. 声明顺序 3.12. 编写简短函数 译者 (YuleFox) 笔记 4. 来自 Google 的奇技 4.1. 智能指针 4.2. cpplint 5. 其他 C++ 特性 5.1. 引用参数 5.2. 函数重载 5.3. 缺省参数 5.4. 变长数组和 alloca() 5.5. 友元 5.6. 异常 5.7. 运行时类型识别 5.8. 类型转换 5.9. 流 5.10. 前置自增和自减 5.11. const 的使用 5.12. 整型 5.13. 64 位下的可移植性 5.14. 预处理宏 5.15. 0 和 NULL 5.16. sizeof 5.17. Boost 库 6. 命名约定 6.1. 通用命名规则 6.2. 文件命名 6.3. 类型命名 6.4. 变量命名 6.5. 常量命名 6.6. 函数命名 6.7. 名字空间命名 6.8. 枚举命名 6.9. 宏命名 6.10. 命名规则的特例 7. 注释 7.1. 注释风格 7.2. 文件注释 7.3. 类注释 7.4. 函数注释 7.5. 变量注释 7.6. 实现注释 7.7. 标点, 拼写和语法 7.8. TODO 注释 译者 (YuleFox) 笔记 8. 格式 8.1. 行长度 8.2. 非 ASCII 字符 8.3. 空格还是制表位 8.4. 函数声明与定义 8.5. 函数调用 8.6. 条件语句 8.7. 循环和开关选择语句 8.8. 指针和引用表达式 8.9. 布尔表达式 8.10. 函数返回值 8.11. 变量及数组初始化 8.12. 预处理指令 8.13. 类格式 8.14. 初始化列表 8.15. 名字空间格式化 8.16. 水平留白 8.17. 垂直留白 译者 (YuleFox) 笔记 9. 规则特例 9.1. 现有不合规范的代码 9.2. Windows 代码 10. 结束语

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值