package iconv
import (
"testing"
)
type iconvTest struct {
description string
input string
inputEncoding string
output string
outputEncoding string
bytesRead int
bytesWritten int
err Error
}
var iconvTests = []iconvTest {
iconvTest{
"simple utf-8 to latin1 conversion success",
"Hello World!", "utf-8",
"Hello World!", "latin1",
12, 12, nil,
},
iconvTest{
"invalid source encoding causes EINVAL",
"", "doesnotexist",
"", "utf-8",
0, 0, EINVAL,
},
iconvTest{
"invalid destination encoding causes EINVAL",
"", "utf-8",
"", "doesnotexist",
0, 0, EINVAL,
},
iconvTest{
"invalid input sequence causes EILSEQ",
"\xFF", "utf-8",
"", "latin1",
0, 0, EILSEQ,
},
iconvTest{
"invalid input causes partial output and EILSEQ",
"Hello\xFF", "utf-8",
"Hello", "latin1",
5, 5, EILSEQ,
},
}
func TestConvertString(t *testing.T) {
for _, test := range iconvTests {
// perform the conversion
output, err := ConvertString(test.input, test.inputEncoding, test.outputEncoding)
// check that output and err match
if output != test.output {
t.Errorf("test \"%s\" failed, output did not match expected", test.description)
}
// check that err is same as expected
if err != test.err {
if test.err != nil {
if err != nil {
t.Errorf("test \"%s\" failed, got %s when expecting %s", test.description, err, test.err)
} else {
t.Errorf("test \"%s\" failed, got nil when expecting %s", test.description, test.err)
}
} else {
t.Errorf("test \"%s\" failed, got unexpected error: %s", test.description, err)
}
}
}
}
func TestConvert(t *testing.T) {
for _, test := range iconvTests {
// setup input buffer
input := []byte(test.input)
// setup a buffer as large as the expected bytesWritten
output := make([]byte, 50)
// peform the conversion
bytesRead, bytesWritten, err := Convert(input, output, test.inputEncoding, test.outputEncoding)
// check that bytesRead is same as expected
if bytesRead != test.bytesRead {
t.Errorf("test \"%s\" failed, bytesRead did not match expected", test.description)
}
// check that bytesWritten is same as expected
if bytesWritten != test.bytesWritten {
t.Errorf("test \"%s\" failed, bytesWritten did not match expected", test.description)
}
// check output bytes against expected - simplest to convert output to
// string and then do an equality check which is actually a byte wise operation
if string(output[:bytesWritten]) != test.output {
t.Errorf("test \"%s\" failed, output did not match expected", test.description)
}
// check that err is same as expected
if err != test.err {
if test.err != nil {
if err != nil {
t.Errorf("test \"%s\" failed, got %s when expecting %s", test.description, err, test.err)
} else {
t.Errorf("test \"%s\" failed, got nil when expecting %s", test.description, test.err)
}
} else {
t.Errorf("test \"%s\" failed, got unexpected error: %s", test.description, err)
}
}
}
}
分享到:
相关推荐
`iconv_test.rar`提供了一个在Windows环境下利用Visual Studio 2008编译`iconv`库的例子,通过编译生成的`iconvlib.lib`库文件,开发者可以在自己的应用程序中集成`iconv`功能,方便地进行各种字符编码的转换,从而...
LIBXML_ICONV_Zlib库是用于在C++环境中解析XML文件的一个重要工具集,它结合了libxml2、iconv和zlib这三个组件,为开发者提供了高效且功能强大的XML处理能力。下面将详细介绍这三个组件以及如何在Visual Studio 2010...
iconv_open("utf-8", "gb2312") 调用失败
在Linux下有个iconv.h头文件,里面是对编码转换处理的封装。但在windows下是没有这个头文件的。这里有三个文件,高手编写,用在windows下:iconv.h,iconv.dll和iconv.lib,导出库,就可以用iconv.h了。用法与Linux下...
我在做一个加密芯片项目...1.如要iconv_open、iconv_close这样的名字,需在iconv.h中加入#define LIBICONV_PLUG即可。 2.如要libiconv_open、libiconv_close这样的名字,需在iconv.h中移除#define LIBICONV_PLUG即可。
而apr-iconv是APR中的一个子项目,专门用于处理字符编码转换,对于开发需要处理多种语言和编码的软件至关重要。本文将深入探讨apr-iconv-1.2.1版本的具体内容和应用。 首先,让我们理解什么是apr-iconv。apr-iconv...
要测APR给tomcat带来的好处最好的方法是在慢速网络上(模拟Internet),将Tomcat线程数开到300以上的水平,然后模拟一大堆并发请求。如果不配APR,基本上300个线程狠快就会用满,以后的请求就只好等待。...
标题中的"iconv.h iconv.lib charset.lib"指的是在编程过程中使用iconv库时所需的头文件和库...了解并熟练使用`iconv.h`和对应的库文件,可以提升程序处理多语言环境下的文本能力,同时避免因为编码不匹配导致的问题。
2、直接解压,看到2个安装包,先安装iconv_hook-1.0.0-1.i386.rpm 3、#rpm -ivh iconv_hook-1.0.0-1.i386.rpm 4、#rpm -ivh mod_encoding-2.2.0-1.i386.rpm 5、检查配置文件httpd.conf,加入以下内容 LoadModule ...
Iconv是一个广泛使用的字符编码转换库,主要用于在不同的字符编码之间进行转换,如从GBK转换到UTF-8。在这个压缩包中,包含了经过封装后的C++接口,使得开发者能够更方便地在C++项目中使用iconv功能。下面将详细介绍...
1. **apr-iconv-1.2.2.tar.gz**:这是一个用于字符集转换的库,Apache HTTP服务器使用它来处理不同编码之间的转换。 APR (Apache Portable Runtime) 的一部分,它提供了跨平台的接口,确保Apache在不同操作系统上的...
总的来说,`mb_convert_encoding`提供了更全面的多字节字符支持,而`iconv`则在性能上可能有优势。选择哪个函数取决于具体的应用场景和需求。在处理编码问题时,理解并正确使用这两个函数是确保数据完整性和避免乱码...
在C语言中,处理不同的字符集和编码可能需要特定的库支持,例如iconv或 WideCharToMultiByte API。 3. **XML命名规则**:元素和属性的名称必须遵循一定的规则,如不能以数字开头,不能包含某些特殊字符等。`op_xml_...
总的来说,"TestZxing.rar"为C#和C++开发者提供了一个便捷的条码识别解决方案,简化了在这些语言中实现条码扫描功能的过程。通过理解和运用这个移植版本的ZXing库,开发者可以在各种类型的项目中快速集成条码读取...
在这个场景下,luaiconv_test可能是用于验证iconv功能是否正常工作,包括读取不同编码的文本文件,转换编码,然后检查转换结果是否正确。 在Windows环境下,执行Lua脚本通常需要一个Lua解释器,比如luajit或lua5.x...
**iconv库在Windows下的应用** `iconv`是一个用于字符编码转换的库,它在各种操作系统中广泛使用,包括Unix、Linux以及Windows。在Windows环境下,开发人员有时需要处理不同编码之间的转换问题,这时`iconv`库就...
易语言iconv_static.lib支持库中文名为易语言编码转换支持库,本易语言支持库在转换编码时使用 GNU libiconv 1.9.1版,支持现有绝大多数编码和字符集。易语言iconv_static.lib支持库为易语言静态支持库,需要易语言...
主要函数如`iconv_open()`用于创建转换描述符,`iconv()`用于实际的编码转换,`iconv_close()`用于关闭转换描述符。 3. **跨平台**:由于libiconv是开源的,它已经被移植到多种操作系统上,如Linux、Unix、Windows...
例如,libgtk-0.dll、iconv.dll、libglib-2.0-0.dll等都是Airsnort运行所依赖的基础库,它们提供了图形用户界面和数据处理功能。wlancap.dll则是用于捕获和解析无线网络数据包的关键模块,而Airsnort.exe是主应用...