`
deferling
  • 浏览: 17003 次
  • 性别: Icon_minigender_1
  • 来自: 东京
文章分类
社区版块
存档分类
最新评论

ruby 的字节(byte)跟unicode(利用iconv进行编码转换)

阅读更多

require 'iconv'
$KCODE='u'

class String
 def String.safe_iconv(str_utf8)
    sentan=""
    koutan= str_utf8.to_s
   while sentan.to_s.size < str_utf8.to_s.size
    begin
       return sentan = sentan.to_s + Iconv.iconv('SHIFT_JIS','UTF-8', koutan)[0]
    rescue Iconv::Failure => e   
       sentan = sentan.to_s + e.success.to_s
       koutan = e.failed.to_s.sub(/^\S/,"?")
    end
  end
  end
end


puts String.safe_iconv("Zörkendörfer ")



上面一段代码加不加$KCODE='u'结果是不一样的。
$KCODE
    Ruby の認識するマルチバイト文字列エンコーディングです。変数の値は "EUC" "SJIS" "UTF8" "NONE" のいずれかの文字列です。
ruby 认识的复合字节字符串uncoding。可以选择"EUC" "SJIS" "UTF8" "NONE中的任意一个

$KCODE の値が "EUC" のときは文字列や正規表現のエンコーディングが EUC-JP であると仮定します。同様に "SJIS" のときは Shift JIS を仮定します。 "UTF8" のときは UTF-8 を仮定します。 "NONE" のときはマルチバイト文字列を認識しません。

$KCODE的值是"EUC"的时候字符串和正则表达式解码(uncoding)采取EUC-JP方式假设
$KCODE的值是"SJIS"的时候字符串和正则表达式解码(uncoding)采取SJIS方式假设
$KCODE的值是"NONE"的时候字符串和正则表达式解码(uncoding)采取NONE方式假设
NONE的时候不能为复合字节字符串解码

另外还有个方法可以认识复合字节的字符串,用ActiveSupport里面的chars类


3
2
分享到:
评论
1 楼 deferling 2008-09-04  

require 'iconv'
$KCODE='u'

class String
  @re = ""
  def String.safe_iconv(str_utf8)
    begin
      String.add(Iconv.iconv('SHIFT_JIS','UTF-8',str_utf8)[0])
    rescue Iconv::Failure => e   
      str_utf8 = nil
      String.add(e.success.to_s)
      String.safe_iconv(e.failed.to_s.sub(/^\S/,"?"))
    end
  end
  
  def String.add(str_1)
    @re << str_1.to_s
    return @re
  end
end



这是昨天测试时候想出的另一种方法,用了一种不算严格的递归
有可能会造成内存溢出
Iconv::Failur是在Iconv转换出错的时候引发的一个例外对象e.success是错误前的部分,
e.failed是错误后,利用这个类就可以完成很多功能,对Iconv进行扩展了
发表评论

文章已被作者锁定,不允许评论。

相关推荐

    Android NDK使用Iconv进行编码转换

    Iconv是一个广泛使用的字符集转换工具,它允许在多种字符编码之间进行转换,包括Unicode、GBK和UTF-8。 Iconv在C/C++编程中非常常见,因为它提供了高效的字符编码转换功能。在Android NDK环境中,我们可以通过编写C...

    iconv-文件编码转换

    - `-t` 后面可以跟多个目标编码,这样 `iconv` 会尝试按顺序转换,直到成功。 ### 编码转换的常见问题与解决 在编码转换过程中,可能会遇到以下问题: 1. **乱码**:当源编码和目标编码不匹配时,会出现乱码。...

    C语言字符编码转换UNICODE、GBK、UTF-8互相转换

    在实际操作中,需要注意字节顺序问题,尤其是处理UTF-16这样的双字节编码时。同时,处理编码错误也很重要,比如遇到未知字符或编码不完整的情况,需要决定如何处理,如替换为问号或其他占位符。 在C语言中,这些...

    ICONV 字符转换 编码库

    GBK使用2字节编码,可表示20,902个汉字及部分其他符号。 3. **Unicode**:Unicode是一个国际标准,旨在为世界上所有语言提供一个统一的字符集。它有多种编码实现,如UCS-2(使用2字节)和UTF-16(使用2或4字节)。...

    iconv.rar - 编码转换工具

    **编码转换工具iconv详解** 编码转换在信息技术领域中扮演着至关重要的角色,尤其是在处理不同系统、语言或网络环境下的文本数据时。标题中的“iconv.rar”是一个压缩包,包含了一个名为“iconv”的编码转换工具,...

    iconv字符编码转换的操作实例

    "iconv字符编码转换的操作实例"这个标题表明我们将探讨如何使用iconv库在C++环境中进行字符编码的转换。iconv是一个广泛使用的跨平台库,用于在不同字符编码之间进行转换,例如从GBK(中国的常见编码)转换到UTF-8...

    c/c++采用编码转换表实现gbk与unicode互转

    在C/C++中,实现GBK到Unicode或Unicode到GBK的转换,主要步骤包括读取编码转换表、解析输入字符串、以及进行逐字节的转换。编码转换表通常是一个二维数组,其中每个元素对应一个GBK编码和对应的Unicode编码。对于GBK...

    windows下使用iconv转换编码 内附使用示例

    在Windows操作系统中,进行字符编码转换时,可能会遇到与Linux或Unix系统不同的情况,因为Windows原生并不包含iconv库。然而,为了满足跨平台的编码转换需求,开发者们为Windows构建了兼容iconv功能的实现。这个工具...

    unicode,gbk编码相互转换C程序

    Unicode编码是一种多字节编码,最常用的形式是UTF-8。UTF-8的特点是它可以表示Unicode中的任何字符,并且对ASCII字符(如英文、数字)保持向后兼容,只需一个字节。对于非ASCII字符,UTF-8使用2到4个字节来编码。 ...

    Unicode和GBK编码转换表

    由于GBK是在Unicode出现之前制定的,所以它没有完全遵循Unicode的编码规则,这就导致了在处理GBK编码和Unicode编码的文本时可能需要进行转换。 GSM中文字库则是针对手机等移动设备设计的一种字符编码,主要用于短信...

    unicode与gbk双向转换编码表

    GBK 使用双字节编码,最多可以表示20,902个字符。 Unicode 与 GBK 之间的转换通常需要进行编码和解码的过程。编码是将字符转换成字节序列,解码则是将字节序列还原为字符。在 C/C++ 等编程语言中,可以使用库函数如...

    iconv 跨平台编码转换库

    iconv是知名的开源跨平台编码转换库,iconv.exe是iconv库在windows下的命令行工具,iconv.exe的一般用法:iconv.exe -f gbk -t utf-8 gbk.txt &gt; utf-8.txt。其中 -f gbk 指明转换前的文件编码是gbk,-t utf-8 指明...

    字符编码转换iconv

    `iconv` 是一个广泛使用的命令行工具和库,它允许在不同的字符编码之间进行转换,如 ASCII、UTF-8、GBK 等。在本篇中,我们将深入探讨 `iconv` 的工作原理、使用方法以及在实际应用中的价值。 首先,让我们理解字符...

    iconv 自动转码批处理工具

    "iconv"是一个非常实用的命令行工具,它能够帮助用户在不同的字符编码之间进行转换。本篇将详细介绍`iconv`自动转码批处理工具及其使用方法。 首先,`iconv`工具源于GNU项目,它的主要功能是将文件或数据流从一种...

    iconv字符集转换库

    iconv字符集转换库是计算机编程领域中一个重要的工具,主要用于在不同的字符编码之间进行转换。这个库在处理多语言环境、数据交换以及网络通信时起着至关重要的作用。字符集,也称为字符编码,是一种将字符与数字或...

    利用iconv函数转UTF8码

    一个利用iconv函数将GBK码转为UTF-8码的函数,本函数在LINUX系统下测试正常。目前支持中文繁简、日文、英文、俄文等的转码。函数其实很简单,另外精选了一些本人觉得有助于理解ICONV函数及Unicode、GBK这些概念的...

    iconv编码转码工具

    - **特殊字符**:非ASCII字符的转换需要特别小心,特别是涉及到多字节编码时。 总之,`iconv`是一个强大的工具,能有效解决编码转换问题,但在使用时应充分理解编码原理,以确保转换的准确性和有效性。无论是在日常...

    php 编码相互转换类(gbk转换utf8)

    使用这样的类,开发者可以更稳定地进行编码转换操作,特别是在处理包含复杂或特殊字符的数据时。总的来说,这个编码转换类对于处理中文字符集的PHP项目来说是一个有价值的工具,能够提高代码的健壮性和兼容性。

    windows下文件编码转换工具iconv

    windows版 具体用法: -f From CodePage 源编码 -t To Codepage 目标编码 -s SubDirectory 递归检索子目录 -v Verbose 显示转化日志 eg: iconv *.txt -p .\ -f gb2312 -t utf-8 -v -s

Global site tag (gtag.js) - Google Analytics