Nim-字符串编码转换


Nim中对字符串进行转码需要用到encodings模块。


encodings模块:


proc getCurrentEncoding():string {.raises: [],tags: [].}

#检索当前系统编码,在UNIX上,总是返回“UTF-8”。


proc open(destEncoding = "UTF-8"; srcEncoding = "CP1252"): EncodingConverter {. 

raises: [OverflowError, EncodingError], tags: [].}

#打开一个转换器,能够转换srcEncoding 到 destEncoding码。如果不能实现会引起异常。


proc close(c: EncodingConverter) {.raises: [], tags: [].}                   

#释放转换器 c 。


proc convert(c: EncodingConverter; s: string): string {.raises: [OSError],    
    tags: [].} 

# 通过转换器c ,使字符串s 转换为destEncoding码, 这里假定字符串s 的编码为srcEncoding。


proc convert(s: string; destEncoding = "UTF-8"; srcEncoding = "CP1252"): string {.      
    raises: [OverflowError, EncodingError, OSError], tags: [].}   

#转换字符串S 为destEncoding码,这里假定字符串s 的编码为srcEncoding。

#这里打开一个转换器,使用它并再此关闭它,这样会更方便,但是与重用一个转换器相比也可能会是低效的。


例:

import encodings

var s = "Nim中的字符串编码转换"

echo getCurrentEncoding()                            

var convencoding: EncodingConverter
convencoding = open("GB2312","UTF-8")
echo convert(convencoding,s)

convencoding.close()

echo convert(s,"GB2312","UTF-8")


测试两种convert效率:

import times,encodings
#echo cpuTime() 
var
  time1,time2,time3:float
  str = "测试convert效率"

time1 = cpuTime()

var con = open("GB2312","UTF-8")
for i in 0..100000:
  discard convert(con,str)
con.close()
time2 = cpuTime()


for i in 0..100000:
  discard convert(str,"GB2312","UTF-8")

time3 = cpuTime()

echo time2 - time1
echo time3 - time2


经过测试可以得出,当多次转换字符串编码时,使用第一种方式转码效率更高。








  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值