punycode
A simple CLI tool to decode a punycode encoded string
Usage
Decoding a single string, meaning conversion from punycode to human readable text
punycode xn--blbrgrd-fxak7p
Will emit
blåbærgrød
As an alternative to provided arguments, you can pipe text into punycode
echo xn--blbrgrd-fxak7p | punycode
Will emit
blåbærgrød
Encoding a single string, meaning conversion from human readable text to punycode
punycode kødpålæg
Will emit
xn--kdplg-orai3l
As an alternative to provided arguments, you can pipe text into punycode
echo kødpålæg | punycode
Will emit
xn--kdplg-orai3l
Installation
Installation is easy using Go
go install github.com/jonasbn/punycode@latest
If you want a particular version, please see Go Modules Reference
Description
TODO
Diagnostics
TODO
Exit Status
-
0
success, provided string has been decoded and printed
-
1
failure no argument provided or data from STDIN
-
2
failure reading from STDIN
-
3
encoding or decoding failed
Dependencies
This utility requires:
In addition to a few of the standard libraries
Bugs and Limitations
There a no known bugs, please see the GitHub repository issues section for a up to date listing.
Only support for Unicode
The utility is limited to decoding to Unicode (version 13) from Punycode.
Please see golang.org/x/net/idna for details.
Only a single argument
punycode
only takes a single argument.
punycode xn--blbrgrd-fxak7p
blåbærgrød
So providing more than one argument will only return the first argument
punycode xn--blbrgrd-fxak7p xn--kdplg-orai3l
blåbærgrød
Author
Acknowledgements
- @isviridov, bug fix contribution
Motivation
This utility was created, when in the process of learning Go. I have worked in the DNS and domain name business for a decade so it was only natural to work on something I know when learning Go.
This particular repository touched the following topics:
- Learning to make CLI tools
- Making an executable distributable and installable component
- Reading data from the CLI
- Reading data from STDIN
- Testing a CLI tool / Main function in Go
All of the above was covered in: punyencode and punydecode
The punycode
is a merge of the two, which then opened up for more things to learn.
- Using a regular expressions
- Capturing and testing output emitted to STDOUT
See the resources and references below for resources on the above topics.
Resources and References
- Wikipedia: Punycode
- Go Modules Reference
- GitHub: punydecode
- GitHub: punyencode
- golang.org/x/net/idna
- Go By Example: Regular Expressions
- yourbasic.org/golang: Read a file (stdin) line by line
- Blog post: Test the main function in Go by Johannes Malsam
- StackOverflow: "In Go, how do I capture stdout of a function into a string?"
- StackOverflow: "How to test a function's output (stdout/stderr) in unit tests"
License and Copyright
Copyright Jonas Brømsø (jonasbn) 2022-2023
MIT License, see separate LICENSE
file