Skip to content

Latest commit

 

History

History
executable file
·
140 lines (111 loc) · 4.68 KB

README.zh_CN.md

File metadata and controls

executable file
·
140 lines (111 loc) · 4.68 KB

Perfect ICONV

Get Involed with Perfect!

Star Perfect On Github Chat on Gitter Follow Perfect on Twitter Join the Perfect Slack

Swift 4.1 Platforms OS X | Linux License Apache PerfectlySoft Twitter Join the chat at https://gitter.im/PerfectlySoft/Perfect Slack Status

本项目是受Yasuhiro Hatta的 Iconv项目启发而实现的Swift ICONV 类库。详见https://github.com/yaslab/Iconv

本项目通过SPM进行编译,是Perfect 项目的一个组成部分。

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

快速上手

SPM软件包管理器

请在您的项目的Pacakge.swift 文件中增加如下依存关系:

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

头文件定义

随后请将iconv库函数声明到您的源代码:

import PerfectICONV

函数库初始化

在进行文字转码之前,请首先初始化函数库:

do {
  let iconv = try Iconv(from: .GB2312, to: .UTF_8)
}catch(let err) {
  /// 如果编码协议名称无效,则可能会出错
}

⚠️注意⚠️ 编码所用常量字符串可以在本项目源代码中找到,输入关键字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 提供了若干中方便的转码方法:

  • iconv.utf8(bytes: [Int8]) 或者 iconv.utf8(bytes: [UInt8]): 直接将有符号或者无符号的二进制码流转换为UTF8字符串
let bytes:[UInt8] =  [0xd6, 0xd0, 0xb9, 0xfa, 0x0a]
guard let china = iconv.utf8(buf: bytes) else {
  /// 出错了!
}//end guard
// 如果没错,会显示 "中国"
print(china)
  • iconv.convert(buf: [Int8]) -> [Int8] or iconv.convert(buf: [UInt8]) -> [UInt8]: 在二进制码流之间互相转换
let bytes:[UInt8] =  [0xd6, 0xd0, 0xb9, 0xfa, 0x0a]
let chinaBytes = iconv.convert(buf: bytes)
// 如果没错的话,chinaBytes内容就是一个新的二进制码流
  • iconv.convert(buf: UnsafePointer<Int8>, length: Int) -> (UnsafeMutablePointer<Int8>?, Int): 与Hatta原项目函数设计类似,将原码流以指针和长度为参数,转换为一个新的指针和新长度构成的元组。 ⚠️注意⚠️ 如果使用指针,请务必手动释放内存!

更多信息

关于本项目更多内容,请参考perfect.org.