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

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

时间: 2024-11-05 01:05:46

Nim-字符串编码转换的相关文章

分享万能java字符串编码转换工具类

代码下载地址:http://www.zuidaima.com/share/1795356301560832.htm 原文:分享万能java字符串编码转换工具类 package com.zuidaima.util; import java.io.UnsupportedEncodingException; /** * 转换字符串的编码 */ public class ChangeCharset { /** 7位ASCII字符,也叫作ISO646-US.Unicode字符集的基本拉丁块 */ publ

JAVA字符串编码转换常用类

无论是对程序的本地化还是国际化,都会涉及到字符编码的转换的问题.尤其在web应用中常常需要处理中文字符,这时就需要进行字符串的编码转换,将字符串编码转换为GBK或者GB2312.一.关键技术点:    1.当前流行的字符编码格式有:US-ASCII.ISO-8859-1.UTF-8.UTF-16BE.UTF-16LE.UTF-16.GBK.GB2312等,其中GBK.GB2312是专门处理中文编码的.    2.String的getBytes方法用于按指定编码获取字符串的字节数组,参数指定了解码

Java 正确的做字符串编码转换

字符串的内部表示? 字符串在java中统一用unicode表示( 即utf-16 LE) , 对于 String s = "你好哦!"; 如果源码文件是GBK编码, 操作系统(windows)默认的环境编码为GBK,那么编译时,  JVM将 按照GBK编码将字节数组解析成字符,然后将字符转换为unicode格式的字节数组,作为内部存储. 当打印这个字符串时,JVM 根据操作系统本地的语言环境,将unicode转换为GBK,然后操作系统将GBK格式的内容显示出来. 当源码文件是UTF-8

python中字符串编码转换

字符串编码转换程序员最苦逼的地方,什么乱码之类的几乎都是由汉字引起的. 其实编码问题很好搞定,只要记住一点: 任何平台的任何编码,都能和Unicode互相转换. UTF-8与GBK互相转换,那就先把UTF-8转换成Unicode,再从Unicode转换成GBK,反之同理. 注意:在python3中encode,在转码的同时还会把string 变成bytes类型,decode在解码的同时还会把bytes变回string # 这是一个 UTF-8 编码的字符串 utf8Str = "你好地球&quo

java字符串编码转换

java字符串编码转换方法: 1 /** 2 * 将UTF-8编码参数转换成ISO-8859-1编码 3 */ 4 private String convertToISO_8859_1(String param) { 5 String result = null; 6 if (null != param && !"".equals(param)) { 7 try { 8 result = new String(param.getBytes("UTF-8&quo

python3字符串编码转换

编码转换:1.将文本已以二进制方式读取出来:2.将读取的二进制文本已改文本的编码方式进行解码成Unicode3.然后将解码后的Unicode编码成要转换的编码格式. 例:将utf-8转换成gbk模式流程图:(例) utf-8------>unicode------>gbk 代码(例)f = open("oldFile.txt", "rb") # 以二进制方式打开 s = f.read() # 读取打开的文本f.close()s_unicode = s.d

python字符串编码转换

假设读者已经了解了什么叫字符集,什么叫编码,什么叫解码. 首先要明确,虽然有三种前缀(无前缀,前缀u,前缀b),但是字符串的类型只有两种(str,bytes),实验如下:               根据程序以及以上运行结果,发现无前缀,和前缀u,构造出来的字符串常量,是一样的. 类型一样是str,长度一样是3,==判断也是返回true.is判断也是返回true. 其实,这里是因为,python3中,字符串的存储方式都是以Unicode字符来存储的,所以前缀带不带u,其实都一样. 结论:字符串常

python 字符串编码转换

import chardetdef CheckCode(filename): adchar=chardet.detect(filename) if adchar['encoding']=='utf-8': filename=filename.decode('utf-8') else: filename=filename.decode('gbk') return filename

java字符串的各种编码转换

import java.io.UnsupportedEncodingException; /** * 转换字符串的编码 */ public class ChangeCharset { /** 7位ASCII字符,也叫作ISO646-US.Unicode字符集的基本拉丁块 */ public static final String US_ASCII = "US-ASCII"; /** ISO 拉丁字母表 No.1,也叫作 ISO-LATIN-1 */ public static fina

【转载】java字符串的各种编码转换

java字符串的各种编码转换 来自:http://www.blogjava.net/rabbit/archive/2008/03/27/189009.html import java.io.UnsupportedEncodingException; /** * 转换字符串的编码 */public class ChangeCharset { /** 7位ASCII字符,也叫作ISO646-US.Unicode字符集的基本拉丁块 */ public static final String US_AS