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 PerfectICONVSet 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.