ruby中如何获得中文/中英文混合字符串的字符个数
2006-05-10 19:48
411 查看
我们首先想到的是使用String.length获取字符串的长度,但是这个函数在纯ascii字符串的时候能够准确获取字符个数。在中文或者中英文混合的时候就不行了。看下面这个例子。
拷贝一段代码,保存为文件kcode.rb。
text="y呀"
chars = text.split(//)
puts "the length of the Array: ",chars.length
puts "the length of the String: ",text.length #will be 3
字符串“text”是一个中英文混合的字符串,text.length将会返回3。因为将中文“呀”当作两个字符来计算了。
使用命令 ruby kcode.rb将会输出:
the length of the Array:
3
the length of the String:
3
在这里我们可以看到,ruby把中文当作两个字符了。
但是如果想要ruby将中文也当作一个字符的话,如何处理?试着使用 ruby -KU kcode.rb运行这个文件,将会输出:
the length of the Array:
2
the length of the String:
3
输出的2应该就是我们想要的结果。这里惟一的不同是“-KU”这个参数。
-K是ruby.exe的一个参数,作用是:
' Specifies the code set to be used. This option is useful mainly when Ruby is used for Japanese-language processing. kcode may be one of: e, E for EUC; s, S for SJIS; u, U for UTF-8; or a, A, n, N for ASCII. (笔者:ruby是日本人发明的,所以人家的说明中说这主要是为日语处理而设置的参数。)
在这里-KU是设置为UTF-8。而设置了这个参数后,使用text.split(//)就会按照指定的编码将text的字符转化为Array数组。中文“呀”就被当作一个单一字符。所以数组chars.length是2。但是text.length却仍然是3。这个对比就是告诉我们,在使用了-KU后,当需要把获得中英文混合的字符串的字符个数的时候,可以使用split(//)将字符串分割为单个字符组成的数组,再获取数组的长度就是了。而不是使用String.length获取字符个数。
获取字符个数的典型应用是截取字符串。例如当要从一个中文/中英文混合字符串中截取一定长度的字符的时候,如果不使用-KU参数,很容易出现乱码的情况。笔者在作ruby on rails应用的时候发现这个问题的。如果在rails的应用中要使用-KU参数的话,只需要象这样启动WEBrick服务器就可以了:ruby -KU script/server。
作者:Thomas Yung 200506 联系作者:earoc@126.com
转载请保留作者声明。
拷贝一段代码,保存为文件kcode.rb。
text="y呀"
chars = text.split(//)
puts "the length of the Array: ",chars.length
puts "the length of the String: ",text.length #will be 3
字符串“text”是一个中英文混合的字符串,text.length将会返回3。因为将中文“呀”当作两个字符来计算了。
使用命令 ruby kcode.rb将会输出:
the length of the Array:
3
the length of the String:
3
在这里我们可以看到,ruby把中文当作两个字符了。
但是如果想要ruby将中文也当作一个字符的话,如何处理?试着使用 ruby -KU kcode.rb运行这个文件,将会输出:
the length of the Array:
2
the length of the String:
3
输出的2应该就是我们想要的结果。这里惟一的不同是“-KU”这个参数。
-K是ruby.exe的一个参数,作用是:
' Specifies the code set to be used. This option is useful mainly when Ruby is used for Japanese-language processing. kcode may be one of: e, E for EUC; s, S for SJIS; u, U for UTF-8; or a, A, n, N for ASCII. (笔者:ruby是日本人发明的,所以人家的说明中说这主要是为日语处理而设置的参数。)
在这里-KU是设置为UTF-8。而设置了这个参数后,使用text.split(//)就会按照指定的编码将text的字符转化为Array数组。中文“呀”就被当作一个单一字符。所以数组chars.length是2。但是text.length却仍然是3。这个对比就是告诉我们,在使用了-KU后,当需要把获得中英文混合的字符串的字符个数的时候,可以使用split(//)将字符串分割为单个字符组成的数组,再获取数组的长度就是了。而不是使用String.length获取字符个数。
获取字符个数的典型应用是截取字符串。例如当要从一个中文/中英文混合字符串中截取一定长度的字符的时候,如果不使用-KU参数,很容易出现乱码的情况。笔者在作ruby on rails应用的时候发现这个问题的。如果在rails的应用中要使用-KU参数的话,只需要象这样启动WEBrick服务器就可以了:ruby -KU script/server。
作者:Thomas Yung 200506 联系作者:earoc@126.com
转载请保留作者声明。
相关文章推荐
- 计算中英文混合字符串长度,中文算两个字符
- javaSE-基础篇-如何获得中文英文混合字符串的字节长度
- 在javascript中如何得到中英文混合字符串的长度
- ASP如何计算中英文混合字符串长度和截取字符串 .
- 在sqlserver中如何从字符串中提取数字,英文,中文,过滤重复字符
- 中英文字符串,中文字符和英文字符转为unicode的16进制并且转为对应10进制数字
- strlen和mb_strlen区别(php获得中英文混合字符长度)
- 回复:String中如果有中文,如何保证length()返回的长度 在 Java 中字符串是以 Unicode 方式编码的,所以,无论中英文都算的长度为 1。根据你的描述,估计是想要取得英文长度为 1 中文长度为 2 的总长度吧。这个,理论上可以构造 An
- java中如何从字符串中删选中文字符(GBK编码和UTF-8编码)
- 处理URL中的中文等字符,计算含有中英文的字符串的长度
- ASP如何计算中英文混合字符串长度和截取字符串
- 一个包含中英文的字符串如何获得它的自然长度
- Objective-C ,ios,iphone开发基础:如何判断一个字符是不是中文字符。计算一段字符串的长度。
- 截取中英文混合的字符串, 保留前面N个字符 ,抛弃被截断的汉字
- iOS中英文混排,获取字符串长度(中文字符数)
- asp.net获得字符串实际长度(包括中文字符)
- 几种获得中英文混合字符串长度方法的性能比较
- lua如何截取中英文混合字符串
- MySQL 中文截取 字符串 中英文混合截取 无乱码
- iOS中如何判断中英文混合的字符长度