Skip to main content
#ATS#resumes#PDF#Unicode#compensation·8 min·October 11, 2026

Why ATS PDF Parsers Break on Hyphens and Em-Dashes (and Drop Minus Signs in Equity Models)

Word processors silently convert standard ASCII hyphens into Unicode en-dashes and em-dashes. Here is how that corrupts date parsing in legacy ATS pipelines, drops negative numbers in equity models, and how to verify your PDF in five seconds.

Written by Published

The silent typography replacement: from 0x2D to Unicode dashes

When you type a date range like 2021-2024 into Microsoft Word, Google Docs, Apple Pages, or Figma, the editor rarely stores the character you actually typed. Word processors feature automatic typographic correction routines that silently substitute the standard ASCII hyphen-minus (Unicode U+002D, byte 0x2D) with an en-dash (U+2013) or an em-dash (U+2014).

For human reading on paper or high-density screens, this substitution follows traditional typesetting rules: en-dashes connect number ranges, while em-dashes indicate parenthetical breaks. But enterprise applicant tracking systems (such as legacy versions of Taleo, Workday, Greenhouse, and brass-ring parsers powered by older Apache Tika or Poppler pdftotext builds) are not reading documents like humans. They run deterministic string scanners and regular expressions tuned strictly to ASCII character sets.

When an automated parser encounters a non-ASCII dash glyph inside a PDF content stream, two silent failures occur: the date tokens merge into an invalid string, or the character gets dropped completely, breaking the candidate experience calculation.

How PDF font streams discard character mappings

To understand why this happens, you have to look at how PDF files encode text. A PDF does not store plain text paragraphs; it stores font glyph identifiers mapped via encoding tables. When your word processor prints or exports a resume to PDF, it subsets the font, generating a custom CMap (Character Map) dictionary known as /ToUnicode.

Standard alphanumeric characters (A-Z, 0-9) almost always receive correct ASCII mappings. But punctuation variants often land in secondary lookup tables or private glyph slots. If the PDF generator produces an incomplete /ToUnicode CMap, a C-based PDF extraction engine cannot translate the drawn glyph back into its underlying character. The extractor either outputs a replacement character (U+FFFD), inserts a null byte, or omits the glyph entirely.

  • ASCII Hyphen-Minus (U+002D, byte 0x2D): Supported natively by every parser, regex engine, and shell tool since 1963.
  • Non-Breaking Hyphen (U+2011, bytes E2 80 91): Inserted by word processors to prevent line wraps; frequently stripped or misread by PDF extractors.
  • En-Dash (U+2013, bytes E2 80 93): The typographical standard for date ranges; regularly breaks ASCII-only regex patterns.
  • Em-Dash (U+2014, bytes E2 80 94): Produced by typing two consecutive hyphens; treated as an unknown multibyte sequence in legacy C locales.
  • Minus Sign (U+2212, bytes E2 88 92): Mathematical minus; frequently stripped by string sanitizers that only retain [A-Za-z0-9].

The tokenization breakdown: the '2021-2024' bug

Applicant tracking systems rely on segmentation engines to calculate your total years of experience. These engines search for employment duration patterns using regular expressions resembling this pattern: (19|20)\d{2}\s*-\s*(19|20)\d{2}.

Notice the hyphen in that expression: it is an ASCII 0x2D. If the word processor converted your input to an en-dash or em-dash without spaces, the extractor sees 2021\u20142024 or 2021\u20132024. Because standard POSIX word boundary checks (\b) and ASCII delimiter classes do not recognize multibyte UTF-8 dashes as separators, the regex fails to match.

In other legacy pipelines, a pre-processing sanitizer runs a naive strip pattern such as s/[^a-zA-Z0-9 ]//g to clean up punctuation before indexing. When that runs on '2021\u20142024', the dash is erased without adding whitespace. The resulting token becomes '20212024', an invalid eight-digit integer. The parser cannot parse start and end dates from an eight-digit number, records 0 months of experience for that position, and deprioritizes your profile in recruiter search filters.

Typed StringUnderlying GlyphParser Extractor OutputSegmentation Result
2021 - 2024ASCII Hyphen (0x2D)2021 - 2024Start: 2021, End: 2024 (3 Years)
2021–2024En-dash (U+2013, no space)2021–2024 (single token)Date range unrecognized (0 Years)
2021-2024 with em-dashEm-dash (U+2014, no space)20212024 (dash stripped)Syntax error; duration dropped
2021‑2024Non-breaking (U+2011)2021?2024 or replacement glyphDate extraction failure

The equity model disaster: dropped minus signs in compensation models

This character encoding pitfall extends beyond employment dates. It causes severe distortion in compensation documents and financial equity models.

When software engineers and executives negotiate startup compensation packages, they often summarize offer mechanics: base salary, 4-year equity vesting, strike price exercise costs, early-exercise deductions, and expected tax withholding. In spreadsheets (Excel, Google Sheets) or financial tables, negative numbers and cost offsets are formatted as -$15,000, or with the typographical minus sign U+2212 (−$15,000).

When candidate profile systems or resume parsers ingest these financial notes, non-ASCII minus signs are frequently scrubbed. A -$15,000 strike price deduction or tax liability becomes $15,000. In an automated equity calculation, an expense is converted into an asset, inverting the net calculation by $30,000.

In Ravina, we designed the 4-Year Equity Modeler to run completely client-side in pure TypeScript. By calculating strike prices, 83(b) tax liabilities, and dilution brackets locally in the browser, your numbers never pass through untrusted text-stripping scrapers that corrupt negative numbers.

The 4-point ASCII punctuation and character sanitization standard

You do not need to manually inspect hexadecimal character codes to protect your resume from ATS punctuation errors. When preparing or auditing your resume, enforce the 4-point ASCII sanitization standard that Ravina executes automatically inside its in-browser editor:

Standard ASCII ATS Punctuation Rules
Standard ASCII ATS Punctuation Rules: 1. Single-Byte Hyphens: Replace all typographical en-dashes (U+2013), em-dashes (U+2014), horizontal bars (U+2015), and Unicode minus signs (U+2212) with standard ASCII hyphens (0x2D). 2. Buffered Date Ranges: Format all date ranges with a standard ASCII hyphen buffered by single spaces (e.g., "2021 - 2024", not "2021–2024") to prevent concatenated job title tokens. 3. Metric and Cost Attachment: For financial metrics and cost deductions, retain the standard ASCII minus sign directly attached to the numeral (e.g., "-$15,000") so parsers do not invert negative values into positive assets. 4. Plain Text Glyphs: Replace curly quotes, ellipsis characters, and non-standard bullet symbols with standard plain text equivalents.
  • Ensures date ranges like '2021 - 2024' are indexed cleanly without concatenated job titles.
  • Prevents financial deductions from inverting into positive assets in automated compensation models.
  • Protects keywords and bullet points from being dropped by legacy ATS character decoders.

How Ravina handles Unicode normalization deterministically

When building Ravina's ATS diagnostics engine, we decided against relying on probabilistic language models to detect formatting bugs. Language models do not see PDF byte streams; they only see the text that has already been extracted (and potentially corrupted) by an upstream parser.

Instead, Ravina runs a deterministic Unicode normalization pass directly in your browser. It maps U+2010 through U+2015, U+2212, and U+00AD to standard ASCII 0x2D, flags missing whitespace around range separators, and verifies that date tokens cleanly match recruitment indexing schemas.

Because Ravina runs client-side with zero signups and zero fees, your compensation details, unvested equity figures, and employment dates remain private on your own device.

Frequently asked questions

Why do word processors convert my hyphens automatically?

Word processors like Microsoft Word and Google Docs enable 'Smart Punctuation' by default. They automatically convert double hyphens into em-dashes and hyphens between numbers into en-dashes to mimic book printing typography. You can disable this in your application settings under AutoCorrect options.

What is the single safest way to format dates on a resume?

Use full four-digit years separated by an ASCII hyphen with a space on each side: '2021 - 2024'. Surrounding the hyphen with whitespace guarantees that even naive tokenizers treat '2021' and '2024' as separate tokens regardless of character encoding.

Does PDF/A export solve this issue completely?

PDF/A ensures that font subsets contain valid /ToUnicode character maps, which prevents the glyph from disappearing. However, it does not solve tokenization: an ATS regex that searches strictly for ASCII 0x2D will still fail to match an en-dash or em-dash.

How does this impact equity models in offer negotiations?

In offer documents and equity summaries, negative cash flows (such as upfront exercise costs or AMT taxes) formatted with mathematical minus signs (U+2212) can have their minus signs dropped by scrapers, turning costs into phantom profits. Performing equity modeling with client-side calculators prevents this.

Related resources and tools
AH
Founder & sole developer, RYUN

Builds and maintains RYUN (Study Hush, Nativra, Ravina) as a solo developer. Writes about applicant tracking systems, behavioral interview preparation, and comprehensible-input language learning from the perspective of someone shipping the tools.

Why ATS PDF Parsers Break on Hyphens and Em-Dashes (and Drop Minus Signs in Equity Models) | RYUN