Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/Codepoints/unidump

hexdump(1) for Unicode data
https://github.com/Codepoints/unidump

cli console hexdump python3 unicode utility

Last synced: about 2 months ago
JSON representation

hexdump(1) for Unicode data

Awesome Lists containing this project

README

        

# `unidump`

## `hexdump` for your Unicode data

## Installation

Install via `pip`:

# you need Python 3 for unidump
pip3 install unidump

## Usage

Without further ado, here is the usage message of `unidump`:

```
$ unidump --help
usage: unidump [-h] [-n LENGTH] [-c ENC] [-e FORMAT] [-v] [FILE [FILE ...]]

A Unicode code point dump.

Think of it as hexdump(1) for Unicode. The command analyses the input and
then prints three columns: the raw byte index of the first code point in this
row, code points in their hex notation, and finally the raw input characters
with control and whitespace replaced by a dot.

Invalid byte sequences are represented with an “X” and with the hex value en-
closed in question marks, e.g., “?F5?”.

You can pipe in data from stdin, select several files at once, or even mix
all those input methods together.

positional arguments:
FILE input files. Use `-' or keep empty for stdin.

optional arguments:
-h, --help show this help message and exit
-n LENGTH, --length LENGTH
format output using this much input characters.
Default is 16 characters.
-c ENC, --encoding ENC
interpret input in this encoding. Default is utf-8.
You can choose any encoding that Python supports, e.g.
“latin-1”.
-e FORMAT, --format FORMAT
specify a custom format in Python’s {} notation.
Default is “{byte:>7} {repr} {data} ”.
-v, --version show program's version number and exit

Examples:

* Basic usage with stdin:

echo -n 'ABCDEFGHIJKLMNOP' | unidump -n 4
0 0041 0042 0043 0044 ABCD
4 0045 0046 0047 0048 EFGH
8 0049 004A 004B 004C IJKL
12 004D 004E 004F 0050 MNOP

* Dump the code points translated from another encoding:

unidump -c latin-1 some-legacy-file

* Dump many files at the same time:

unidump foo-*.txt

* Control characters and whitespace are safely rendered:

echo -n -e '\x01' | unidump -n 1
0 0001 .

* Finally learn what your favorite Emoji is composed of:

( echo -n -e '\xf0\x9f\xa7\x9d\xf0\x9f\x8f\xbd\xe2' ; \
echo -n -e '\x80\x8d\xe2\x99\x82\xef\xb8\x8f' ; ) | \
unidump -n 5
0 1F9DD 1F3FD 200D 2642 FE0F .🏽.♂️

See for images. The “elf”
emoji (the first character) is replaced with a dot here, because the current
version of Python’s unicodedata doesn’t know of this character yet.

* Use it like strings(1):

unidump -e '{data}' some-file.bin

This will replace every unknown byte from the input file with “X” and every
control and whitespace character with “.”.

* Only print the code points of the input:

unidump -e '{repr}'$'\n' -n 1 some-file.txt

This results in a stream of code points in hex notation, each on a new line,
without byte counter or rendering of actual data. You can use this to count
the total amount of characters (as opposed to raw bytes) in a file, if you
pipe it through `wc -l`.
```

## License

MIT-licensed. See [license file](LICENSE.md).