Set the code pages before transforming encoding from one to another:
do {
let iconv = try Iconv(from: .GB2312, to: .UTF_8)
}catch(let err) {
/// something goes wrong here, e.g., invalid code page, etc.
}
NOTE: Code Page constants could be found on source code of this project with keyword of enum:
public enum CodePage: String {
case US = "US"
case US_ASCII = "US-ASCII"
case CSASCII = "CSASCII"
case UTF_8 = "UTF-8"
case UTF8 = "UTF8"
...
}
Conversions
PerfectICONV has a few express ways of encoding conversions:
iconv.utf8(bytes: [Int8]) or iconv.utf8(bytes: [UInt8]): directly convert a signed or unsigned byte buffer from the source code page to utf-8
let bytes:[UInt8] = [0xd6, 0xd0, 0xb9, 0xfa, 0x0a]
guard let china = iconv.utf8(buf: bytes) else {
/// something wrong
}//end guard
// if ok, it will print "中国"
print(china)
iconv.convert(buf: [Int8]) -> [Int8] or iconv.convert(buf: [UInt8]) -> [UInt8]: convert codepages from one byte buffer to another
let bytes:[UInt8] = [0xd6, 0xd0, 0xb9, 0xfa, 0x0a]
let chinaBytes = iconv.convert(buf: bytes)
// if nothing wrong, the chinaBytes is now an array of UInt8 which contains the expected encoding.
iconv.convert(buf: UnsafePointer<Int8>, length: Int) -> (UnsafeMutablePointer<Int8>?, Int): similar to Mr. Hatta’s api design, convert a source encoding from a pointer with length to the objective tuple.
⚠️NOTE⚠️ YOU MUST MANUALLY DEALLOCATE THE OUTCOME POINTER.
Further Information
For more information on the Perfect project, please visit perfect.org.
Perfect ICONV 简体中文
Swift Class Wrapper for ICONV, inspired by Yasuhiro Hatta’s Iconv Project. See https://github.com/yaslab/Iconv for details.
This package builds with Swift Package Manager and is part of the Perfect project.
Demo
Quick Start
Swift Package Manager
Add a dependency to Package.swift:
Header Declaration
Import iconv lib to your source code:
Initialization
Set the code pages before transforming encoding from one to another:
NOTE: Code Page constants could be found on source code of this project with keyword of
enum
:Conversions
PerfectICONV has a few express ways of encoding conversions:
iconv.utf8(bytes: [Int8])
oriconv.utf8(bytes: [UInt8])
: directly convert a signed or unsigned byte buffer from the source code page to utf-8iconv.convert(buf: [Int8]) -> [Int8]
oriconv.convert(buf: [UInt8]) -> [UInt8]
: convert codepages from one byte buffer to anothericonv.convert(buf: UnsafePointer<Int8>, length: Int) -> (UnsafeMutablePointer<Int8>?, Int)
: similar to Mr. Hatta’s api design, convert a source encoding from a pointer with length to the objective tuple. ⚠️NOTE⚠️ YOU MUST MANUALLY DEALLOCATE THE OUTCOME POINTER.Further Information
For more information on the Perfect project, please visit perfect.org.