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
经过测试可以得出,当多次转换字符串编码时,使用第一种方式转码效率更高。
版权声明:本文为博主原创文章,未经博主允许不得转载。