Scrapers / Developer & File Tools

Unicode Normalizer
hipersoft/unicode-normalizer
Normalize text: apply Unicode NFC/NFKC, strip accents and diacritics, transliterate to ASCII and fix garbled mojibake. For clean matching, dedupe and slugs.
Total users
2Monthly users
1Total runs
78Per text normalized
$0.001Last rebuilt
Oct 26, 2026Overview
Normalize text at scale — apply Unicode NFC/NFKC, strip accents and diacritics, transliterate to ASCII, and repair garbled "mojibake" text. Clean strings for reliable matching, deduplication, slugs and imports.

What it does
- Applies Unicode normalization (NFC / NFD / NFKC / NFKD).
- Strips accents (café → cafe) and transliterates special letters (ß → ss, æ → ae).
- Optionally forces pure ASCII and lowercases.
- Fixes mojibake — text where UTF-8 was mis-decoded as Latin-1 (é → é).
Use cases
- Data matching / dedupe — normalize names and addresses so variants match.
- Slugs & IDs — produce clean ASCII keys from accented text.
- Import cleanup — repair garbled characters from legacy exports.
Input
{ "texts": ["Café des Élèves", "Größe"], "form": "NFC", "stripAccents": true, "toAscii": false, "fixMojibake": false }
| Field | Type | Description |
|---|---|---|
texts |
array | Strings to normalize. |
form |
string | NFC, NFD, NFKC or NFKD. |
stripAccents |
boolean | Remove diacritics. |
toAscii |
boolean | Transliterate and drop non-ASCII. |
fixMojibake |
boolean | Repair UTF-8-as-Latin-1 garbling. |
lowercase |
boolean | Lowercase the output. |
Output

{ "original": "Café des Élèves", "normalized": "Cafe des Eleves", "ascii": "Cafe des Eleves", "changed": true }
Output schema
| Field | Type | Description |
|---|---|---|
original |
string | The input string. |
normalized |
string | Normalized text (per your options). |
ascii |
string | Pure-ASCII version. |
FAQ
What's mojibake? Text like é that appears when UTF-8 is read as Latin-1 — enable fixMojibake to repair it.
Can I automate it? Yes — via integrations on the Apify platform and the Apify API.
Notes
Original clean-room implementation.
Input
| Field | Type | Description |
|---|---|---|
texts requiredTexts | array | One or more strings to normalize. |
formNormalization form | string · NFC, NFD, NFKC, NFKD | Unicode normalization form to apply. Default: "NFC" |
stripAccentsStrip accents | boolean | Remove diacritics (café → cafe). Default: true |
toAsciiForce ASCII | boolean | Transliterate and drop any remaining non-ASCII characters. Default: false |
fixMojibakeFix mojibake | boolean | Repair text where UTF-8 was mis-decoded as Latin-1 (é, ’). Default: false |
lowercaseLowercase | boolean | Lowercase the normalized output. Default: false |
API
curl -X POST "https://api.apify.com/v2/acts/hipersoft~unicode-normalizer/run-sync-get-dataset-items?token=$APIFY_TOKEN" \
-H "Content-Type: application/json" \
-d '{
"texts": [
"Café des Élèves — “Größe”",
"Ĥéllo Wörld",
"Mojibakeé test"
]
}'from apify_client import ApifyClient
client = ApifyClient("YOUR_APIFY_TOKEN")
run = client.actor("hipersoft/unicode-normalizer").call(run_input={
"texts": [
"Café des Élèves — “Größe”",
"Ĥéllo Wörld",
"Mojibakeé test"
]
})
for item in client.dataset(run["defaultDatasetId"]).iterate_items():
print(item)import { ApifyClient } from 'apify-client';
const client = new ApifyClient({ token: 'YOUR_APIFY_TOKEN' });
const run = await client.actor('hipersoft/unicode-normalizer').call({
"texts": [
"Café des Élèves — “Größe”",
"Ĥéllo Wörld",
"Mojibakeé test"
]
});
const { items } = await client.dataset(run.defaultDatasetId).listItems();
console.log(items);Pricing
| Event | Price | Paid plans from |
|---|---|---|
| Text normalized One text normalized (accents, ASCII, mojibake) | $0.001 | $0.0005 |
You pay only for what the run returns. Set a maximum cost per run and it stops cleanly at that limit.
Related scrapers
Bulk Image Downloader
Download thousands of images from a list of URLs and store each in the key-value store with a public link. Returns content type, size, dimensions and SHA-256 per image. Bulk-ready. Great for datasets, backups and media pipelines.
8,102 runs · 103 users · $0.056 / url processedText to Speech
Convert any text to natural-sounding speech as an MP3 download. 300+ premium neural voices across 70+ languages, adjustable rate, pitch and volume. Great for voiceovers, videos, accessibility and audio content. No setup.
278 runs · 22 users · $0.01 / audio generatedGoogle Maps Email Extractor
Search Google Maps for businesses, then crawl each business website to extract emails, social profiles and extra phone numbers. Turns any Maps search into a ready lead list. No setup.
159 runs · 8 users · $0.006 / business lead scrapedWebsite Screenshot
Capture full-page or viewport screenshots of any URL as PNG or JPEG, at any device size. For monitoring, previews, thumbnails and automation workflows.
156 runs · 3 users · $0.004 / screenshot capturedBulk URL Status Checker
Check thousands of URLs over plain HTTP: status codes, broken links (404/410/5xx), full redirect chains, response time, content type, page title and SSL certificate expiry.
154 runs · 13 users · $0.002 / url checkedGoogle Search Scraper
Scrape Google Search results (organic listings) for any query: title, URL, displayed URL, snippet and position. Multi-query, per-country/language, pagination. Uses Google SERP proxy — reliable, no captcha, no setup.
121 runs · 8 users · $0.001 / result scrapedSend the site and the fields. We build it and you get it first.