`

ruby/rails中的中文处理

阅读更多
ruby/rails中的中文处理


原文:http://www.aitic.net/bbs/thread-383-1-1.html

       由于当前的ruby并不支持unicode, 所以中文相关的处理在ruby中一直比较模糊,基本上是各自尝试的路子, 我也列出一些帮助自己整理思路
utf8和unicode的关系
utf其实是(Unicode Translation Format), 也就是unicode在传输时候的编码,有utf8和utf16等多种编码, 其实uf8是一个对中文字很不友好的编码, 为什么呢,因为在utf8中,一个中文是占用3个字节,而一个英文ascii字符却只占用1个字节, 这样一方面使得中文体积膨胀较厉害,另外一方面也不能简单的通过计算字节数来推算字符数. utf16就比较正常,每个字符占用两个字节.但是目前utf16已经后面的utf32应用较少, utf8 是比较公认的编码
utf8 还是 gb2312/gbk
我个人选择utf8,因为我觉得gb2312/gbk不是通用编码,如果使用可能还会有其他问题(比如多语言支持)
转换编码
我们需要require 'iconv' 库, 然后执行
Iconv.conv("utf8","GBK","....") #把字符由GBK转换为UTF8
当源字符集中含有非法编码的时候,我们需要告诉iconv忽略, 否则iconv会报错停止
Iconv.conv("utf8//IGNORE","GBK//IGNORE","....")
utf8 的中文操作:
计算字符数:
在默认的ruby环境下面, 需要执行

require 'jcode'
$KCODE='u' # 或者$KCODE='UTF8' 两者是等价的

计算字符数:
使用jsize或者jlength
"你好".size # 6
"你好".jsize # 2

截取字符操作
"你好"[0,1] #乱码
"你好".scan(/./)[0,1].join # "你"

当然还有另外一个办法:
利用utf16编码每个字都是2个字节(头还有两个字节)的特点,我们可以先把字符转换为utf16,然后按照[0,n*2+2]的方法截取前n个字符 (试验成功.求证中)
Iconv.conv("UTF8","UTF16",Iconv.conv("UTF16","UTF8","你好a中b文")[0,8]) #你好a
分享到:
评论

相关推荐

    prawn-rails:用于Rails的大虾处理程序。 处理和注册pdf格式

    注意: prawn和prawn-table是prawn-rails依赖项,因此除非您要使用这两个库中的任何一个的特定版本,否则无需在项目Gemfile中提及它。 用法 创建一个以pdf为格式,以prawn为处理程序的视图,因此文件名应类似于...

    javaeye热点阅读

    2.1 Ruby on Rails环境下工作流的实现 2.2 让Ruby On Rails走进企业开发 2.3 让Ruby On Rails走进嵌入式开发2.4 用Ruby脚本抓取百度MP3新歌Top 100发布到闲聊3. AJAX 3.1 偶的ExtJS讲座之基础教程PDF版3.2 很炫的...

    wechat:Rails中微信的API,命令和消息处理

    可以在Rails控制器中使用响应器DSL,该控制器提供了一个基于事件的接口来处理最终用户发送的消息。 如果您的应用程序要求使用Wechat OAuth 2.0,则建议使用来应用身份验证。 如果在您的项目中使用了腾讯的weui UI...

    EditPlus 5汉化包(汉文博士翻译版)

    可处理文本、HTML和程序语言的文字编辑器,通过设置用户工具可以将它作为C/Java/Php等语言的简单IDE调试编辑工具,它支持HTML、PHP、Java、C / C ++、CSS、ASP、Perl、JavaScript、VBScript、Python、Ruby on Rails...

    cakePHP 中文手册

    最开始从Ruby On Rails框架里得到灵感。程序员可使用它来快速创建的Web应用程序。我们的首要目的是使你以一种预置的快速且不失灵活性的方式开展工作。 为什么是CakePHP? CakePHP有多个特点,这些特点让CakePHP成为...

    基于知识图谱的中文旅游领域知识服务平台构建 - 从旅游知识库到旅游知识服务平台Platform.zip

    前端技术: ... CSS :用于设计网页外观和样式的样式表语言。 JavaScript:用于在网页上实现交互性和动态效果的脚本语言。...Ruby on Rails:一个基于Ruby编程语言的Web应用框架,提供了高效的开发工具。

    voice-to-speech:一个为语音转文字而设计的React应用,然后使用内置的浏览器API进行语音转文字

    该项目是通过引导的。 您将在下面找到一些有关如何执行...Ruby on Rails 在开发中代理API请求 配置代理后出现“无效的主机头”错误 手动配置代理 配置WebSocket代理 在开发中使用HTTPS 在服务器上生成动态<met

    FormikMultiSteps:使用Formik进行多步骤提交

    该项目是通过引导的。 您将在下面找到一些有关如何执行...Ruby on Rails 在开发中代理API请求 配置代理后出现“无效的主机头”错误 手动配置代理 配置WebSocket代理 在开发中使用HTTPS 在服务器上生成动态<met

    [XML入门经典(第4版)].(Beginning.XML.4th.Edition).(美)亨特,(美)拉夫特,(美)福思特.扫描版.pdf

    第22章 案例研究——基于Ruby on Rails架构的抵押贷款计算器 附录A 习题参考答案 附录B XPath参考 附录C XSLT参考 附录D XML文档对象模型 附录E XML Schema元素与属性参考手册 附录F XML Schema数据类型 附录G SAX ...

    dhtmlxGridk 中文文档

    作为一个100%的客户端的JavaScript解决方案,dhtmlxGrid可以集成与任何服务器端技术(PHP,JAVA的Ruby - on – Rails等 )。dhtmlxConnector库Ajax支持,提供实时保存和更新服务器上的网格数据的情况下自动重新加载...

    MongoDB权威指南(中文版)高清

    15111.2.4 评论树 15211.2.5 投票 15311.3 自定义提交表单:Ruby 15411.3.1 安装Ruby驱动 15411.3.2 使用Ruby驱动 15511.3.3 自定义表单提交 15511.3.4 Ruby的对象映射和在Rails中使用MongoDB 15711.4...

    java开源包1

    开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...

    java开源包11

    开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...

    java开源包2

    开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...

    java开源包3

    开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...

    java开源包6

    开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...

    java开源包5

    开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...

    java开源包10

    开发它是用于在UTF-8 Oracle实例中使用ASCII编码的Oracle 数据库中来正确的传输非ASCII字符。 Java模板语言 Beetl Beetl,是Bee Template Language的缩写,它绝不是简单的另外一种模板引擎,而是新一代的模板引擎,...

Global site tag (gtag.js) - Google Analytics