Full Width Half Width: How to Convert Your Data

A lookup that returns nothing, or a CSV import that rejects rows that look fine, often has one cause: the same text entered in both full width and half width. A and A look alike on screen, but software stores them as separate characters, so values that differ only in width never match. An online converter, Excel's ASC function and Python's NFKC normalization all fix mixed full width half width data, and the right one depends on how many cells need cleaning and how often the job repeats.

What full width and half width characters are

One character can be stored in two display widths, and software reads the wide and narrow versions as different characters. The Latin letter A is code point U+FF21, while half width A is U+0041. Katakana follows the same pattern: ア is U+30A2 and half width ア is U+FF71.

Letters, digits, katakana and symbols all come in both forms. Spaces do too: the full width space is U+3000 and the ASCII space is U+0020. Because the code points differ, a spreadsheet or database has no way to treat the two versions as one value.

Why mixed full width and half width text breaks your data

Lookups, grouping and validation compare characters one by one, so a difference in width alone is enough to make equal-looking values unequal. An exact-match lookup for a customer code typed with A will not find the same code typed with A. A pivot table that groups by that code lists the two spellings as separate items, and a form check may reject the full width entry, because many forms and systems validate such fields as half width characters.

The full width space is the hardest difference to spot. It looks like an ordinary gap, yet it is U+3000 rather than U+0020, so a comparison against a value containing a normal space fails. Garbled characters in a CSV have a separate cause, which UTF-8 vs Shift-JIS: Why CSV Files Get Garbled explains.

Full width or half width: the form to use per character type

Letters, digits, symbols and spaces work best in half width, while katakana works best in full width, because that split keeps values comparable and counts each kana once. "Recommended width by character type" gives the recommended form for each type and the reason.

Recommended width by character type

Character type Recommended form Reason
Letters Half width A (U+FF21) and A (U+0041) are different characters, so mixed letters split lookups
Digits Half width Many forms and systems validate numeric fields as half width characters
Katakana Full width Half width ガ is stored as カ plus a separate ゙, so it counts as two characters
Symbols Half width Codes that mix symbols with letters and digits stay consistent
Spaces Half width The full width space (U+3000) looks blank but is not the ASCII space (U+0020)

These are recommendations rather than a standard. A destination system that demands the opposite form is the one reason to deviate, and its rule then wins. Because voiced marks change the count, a field with a character limit can report a different length after conversion, and Character Counter Online: With or Without Spaces shows how counters treat spaces.

Converting full width to half width with an online converter

A browser tool is the quickest route for a few cells or a single string, because nothing has to be installed or written. Paste the text, tick the character types to convert, and copy the result.

The sakuttoAI converter lets you choose letters and digits, katakana, symbols and spaces separately, so letters can become half width while katakana stays full width. Text is processed in the browser and is not sent to a server, which matters when the cells hold a customer list.

Steps for each direction are in Full Width to Half Width Character Converter, Free. Pasting a short column of full-width customer codes and copying back half-width text takes seconds.

Excel ASC and JIS functions convert a whole column at once

A helper column converts every row in one pass, because ASC is a worksheet function that can be filled down the full column. Microsoft Support describes ASC as a function that "changes full-width" characters to half-width ones. The routine takes four steps:

  1. Add a helper column beside the data and enter ASC there, pointing at the first cell of the original column.
  2. Fill the formula down to the last row.
  3. Copy the helper column and paste it back as values.
  4. Delete the original column once the converted values look right.

A column that mixes letters and katakana is the case to watch. ASC changes full width characters to half width, katakana included, so katakana in that column ends up as half width. When katakana should stay full width, use an online converter that handles each character type separately, or run the conversion on a copy of the column first.

JIS works in the opposite direction and turns half width letters into full width ones. It is filled down a helper column in the same way as ASC, so the four steps apply unchanged.

the function changes full-width (double-byte) characters to half-width (single-byte) characters.

— from "ASC function"

View official source →

converts half-width (single-byte) letters within a character string to full-width (double-byte) characters

— from "JIS function"

View official source →

Python NFKC normalization for recurring cleanup jobs

Python suits cleanup that repeats, because a script written once runs unchanged on every later file. The standard library function unicodedata.normalize() takes a form name and a string, and with "NFKC" it turns full width letters and digits into half width and half width katakana into full width katakana.

import unicodedata

text = unicodedata.normalize("NFKC", text)

Unicode Standard Annex #15 defines Normalization Form KC (NFKC) as "Compatibility Decomposition, followed by Canonical Composition." Third-party libraries such as jaconv and mojimoji also exist for converting between full width and half width. Writing and testing the script costs the most effort of the three methods, and every later file then costs nothing, which is why it fits scheduled work.

Compatibility Decomposition, followed by Canonical Composition

— from "Unicode Normalization Forms"

View official source →

Pitfalls in full width and half width conversion

Bulk conversion rewrites every value at once, so one wrong setting reaches every row before anyone notices. Back up the data first: copy the sheet before running ASC, and duplicate a CSV before running a script against it. Spot-check a sample of converted rows against the originals before replacing the source data.

  • NFKC rewrites more than width. It also converts compatibility characters such as the circled digit ① to 1 and the square symbol ㈱ to (株), which changes text that was never mixed.
  • Convert only the character types chosen in advance. A tool or library that switches each type on or off separately keeps katakana, symbols and spaces from changing by accident.
  • Check lengths after converting. Half width ガ counts as two characters, so a field with a character limit can report a different length once the katakana changes form.

Summary: pick the conversion method by data volume

Match the method to how many cells need cleaning and how often the job repeats, and the conversion stays quick and safe. Three methods cover the range, from a single string to a scheduled job.

  • A few cells or a single string: an online converter, with the character types chosen in the tool.
  • A spreadsheet column: Excel ASC in a helper column, pasted back as values.
  • Cleanup that repeats on every new file: Python NFKC in a script.

Whichever method is used, set the target form per character type first: half width for letters, digits, symbols and spaces, full width for katakana. Then compare a sample of converted rows with the originals, since mixed widths are invisible until a lookup or an import fails.

FAQ

What does the Excel ASC function do?
ASC converts full-width characters to half width, one cell at a time. Microsoft calls it a function that "changes full-width" characters to half-width ones. Enter it in a helper column beside the data, then paste the results back as values.
What does Python's NFKC normalization actually do to my text?
NFKC decomposes each character into its base form and then recomposes it, which is what lets it turn full width letters into half width and half width katakana into full width in one call. Unicode Standard Annex #15 defines it as "Compatibility Decomposition, followed by Canonical Composition." The same step also rewrites compatibility characters such as circled digits and the square symbol ㈱, so spot-check the output.
Is my data sent to a server when I use the conversion tool?
No. The sakuttoAI full width half width converter states, "This tool never sends your text data to any server." Text is processed in the browser, so the tool can be used with personal or confidential data.