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.
import PerfectICONV
do {
let i = try Iconv()
let bytes:[UInt8] = [0xd6, 0xd0, 0xb9, 0xfa, 0x0a]
guard let cn = i.utf8(buf: bytes) else {
XCTFail("fault")
return
}//end guard
print(cn)
XCTAssertTrue(cn.hasPrefix("中国"))
}catch(let err) {
XCTFail("ERROR: \(err)")
}
Add a dependency to Package.swift:
.Package(url: "https://github.com/PerfectSideRepos/Perfect-ICONV.git",
majorVersion:3)
Import iconv lib to your source code:
import PerfectICONV
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"
...
}
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-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]
oriconv.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.
For more information on the Perfect project, please visit perfect.org.