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


經過測試可以得出,當多次轉換字符串編碼時,使用第一種方式轉碼效率更高。








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章