/PunycodeSwift

PunycodeSwift is a pure Swift library to allows you to encode and decode punycoded strings

Primary LanguageSwiftMIT LicenseMIT

Swift Package Manager compatible Carthage compatible Cocoapods Version Cocoapods Platform Build codecov Language Packagist

PunycodeSwift

PunycodeSwift is a pure Swift library to allows you to encode and decode punycoded strings by using String extension.

What is Punycode?

Punycode is a representation of Unicode with the limited ASCII character subset used for Internet host names. Using Punycode, host names containing Unicode characters are transcoded to a subset of ASCII consisting of letters, digits, and hyphen, which is called the Letter-Digit-Hyphen (LDH) subset. For example, München (German name for Munich) is encoded as Mnchen-3ya. (Wikipedia)

Requirements

  • macOS 10.13 or later
  • iOS 12.0 or later
  • tvOS 12.0 or later
  • watchOS 4.0 or later
  • visionOS 1.0 or later
  • Swift 5.0 or later

Installation

Swift Package Manager

Add the following to your Package.swift file.

  • macOS, iOS, tvOS, watchOS, visionOS, and Swift 5

    dependencies: [
        .package(url: "https://github.com/gumob/PunycodeSwift.git", .upToNextMajor(from: "3.0.0"))
    ]
  • macOS, iOS, tvOS, and Swift 5

    dependencies: [
        .package(url: "https://github.com/gumob/PunycodeSwift.git", .upToNextMajor(from: "2.1.1"))
    ]

Carthage

Add the following to your Cartfile and follow these instructions.

  • macOS, iOS, tvOS, watchOS, visionOS, and Swift 5

    github "gumob/PunycodeSwift" ~> 3.0
    
  • macOS, iOS, tvOS, and Swift 5

    github "gumob/PunycodeSwift" ~> 2.0
    
  • macOS, iOS, tvOS, and Swift 4

    github "gumob/PunycodeSwift" ~> 1.0
    

CocoaPods

To integrate TLDExtract into your project, add the following to your Podfile.

  • macOS, iOS, tvOS, watchOS, visionOS, and Swift 5.0

    pod 'Punycode', '~> 3.0'
  • macOS, iOS, tvOS, and Swift 5.0

    pod 'Punycode', '~> 2.0'
  • macOS, iOS, tvOS, and Swift 4.2

    pod 'Punycode', '~> 1.0'

Usage

Full documentation is available at https://gumob.github.io/PunycodeSwift/swiftdoc/.

Encode and decode IDNA:

import Punycode

var sushi: String = "寿司"

sushi = sushi.idnaEncoded!
print(sushi)  // xn--sprr0q

sushi = sushi.idnaDecoded!
print(sushi)  // "寿司"

Encode and decode Punycode directly:

import Punycode

var sushi: String = "寿司"

sushi = sushi.punycodeEncoded!
print(sushi)  // sprr0q

sushi = sushi.punycodeDecoded!
print(sushi)  // "寿司"

Copyright

Punycode is released under MIT license, which means you can modify it, redistribute it or use it however you like.