ruby中文

本文介绍了一种在Ruby中处理中文字符串截取问题的方法。由于Ruby本身不支持Unicode,因此提出了一个通过转换编码来实现中文字符串正确截取的解决方案。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

ruby中中文字符串的截取

Ruby, DevNotes


ruby不支持unicode,导致中文字符串截取出现问题,想了一个比较麻烦的方法来解决这个问题,思路就是转码->截取->反向转码,只要编码选得合适就可以了,程序如下:
#File us_cutter.rb,Class USCutter powered by SawPad

require "iconv"

class USCutter

def initialize(your_charset="GBK")
@conv=Iconv.new("UTF-16",your_charset)
@reverse_conv=Iconv.new(your_charset,"UTF-16")
end

def cut(src,start,length)
p_start=start.class==Fixnum&&start>=0
p_length=length.class==Fixnum&&length>=0
return "" unless src&&p_start&&p_length
src_utf16=@conv.iconv(src)
cutted_src_utf_16=src_utf16[2*start+2,2*length]
@reverse_conv.iconv(cutted_src_utf_16)
end

end

将此class保存为"us_cutter.rb"放入ruby_install_dir/lib/ruby/1.8里面即可,其中:

构造函数中的唯一参数为你目前使用的编码,如"UTF-8","GBK"等
cut函数中src为源字符串,start为起始字符位置(0-based),length为要截取的字符串长度

使用方法应该一目了然了:
u=USCutter.new("GBK")
s1="we love 中华人民共和国"
s2=u.cut(s1,0,10)
puts s1
puts s2

输出:
we love 中华人民共和国
we love 中华
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值