Skip to content

Latest commit

 

History

History
executable file
·
135 lines (108 loc) · 4.42 KB

README.md

File metadata and controls

executable file
·
135 lines (108 loc) · 4.42 KB

Perfect ICONV 简体中文

Get Involed with Perfect!

Star Perfect On Github Stack Overflow Follow Perfect on Twitter Join the Perfect Slack

Swift 4.1 Platforms OS X | Linux License Apache PerfectlySoft Twitter Slack Status

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

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)")
}

Quick Start

Swift Package Manager

Add a dependency to Package.swift:

.Package(url: "https://github.com/PerfectSideRepos/Perfect-ICONV.git", 
majorVersion:3)

Header Declaration

Import iconv lib to your source code:

import PerfectICONV

Initialization

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.