Skip to main content

Free Pinyin Converter

Convert Chinese characters to Pinyin with tone marks, tone numbers, or no tones — with a per-character ruby view and one-tap copy. Handles heteronyms. Free, private, in your browser.

Works for Traditional Chinese too (臺灣, 學習). Japanese kanji and Korean hanja are read as Chinese.

More options (word grouping, capitals, ü, punctuation)

Loading dictionary…

🔒 Your text is converted locally in your browser — nothing is sent to a server.

Common uses

  • Chinese to PinyinConvert Chinese characters into Pinyin with tone marks instantly.
  • Pinyin with Tone MarksGet Pinyin with proper diacritical tone marks (ā á ǎ à).
  • Hanzi to PinyinTurn Hanzi into Pinyin, character by character.
  • Pinyin with Tone NumbersConvert to Pinyin using tone numbers (zhong1) for typing.
  • Add Pinyin to TextAnnotate a passage of Chinese with Pinyin readings.
  • Chinese Name to PinyinRomanize a Chinese name into Pinyin.

How It Works

Converts Chinese characters (Hanzi) to Pinyin with tone marks, tone numbers, or no tones, and shows the reading above each character (ruby). It uses the open-source pinyin-pro dictionary, which handles common heteronyms (characters with more than one reading). Everything runs in your browser once the dictionary loads.

  1. 1
    Paste Chinese text
    Simplified or traditional Hanzi. Non-Chinese text is kept as-is.
  2. 2
    Pick a tone style
    Tone marks (zhōng), tone numbers (zhong1), or no tones (zhong).
  3. 3
    Read the result
    See the full Pinyin string plus a per-character ruby view with the reading above each character.
  4. 4
    Copy it
    Copy the Pinyin to use in your notes or study materials. Nothing is uploaded.

Your text is converted locally in your browser — nothing is sent to a server.

Guide

Worked example

The box opens with 中心学习汉语很有趣. With "Tone marks" selected, the "Pinyin" card shows zhōng xīn xué xí hàn yǔ hěn yǒu qù. Press "Tone numbers" for zhong1 xin1 xue2 xi2 han4 yu3 hen3 you3 qu4, or "No tones" for zhong xin xue xi han yu hen you qu. Open "More options (word grouping, capitals, ü, punctuation)" and press "Group words" to join the syllables of each word: zhōngxīn xuéxí hànyǔ hěn yǒuqù. The word boundaries come from your browser's own word splitter, so another browser may group a little differently. Under "Character by character", 中, 语, 有 and 趣 have a dotted underline because they have more than one reading. Tap 中 and "Reading for 中" offers zhōng and zhòng. "Auto" goes back to the tool's own choice.

Which settings to use, and the limits

  • Choose the tone style for where the text will go. "Tone marks" is the default (nǐ hǎo). "Tone numbers" gives nǐ hǎo as ni3 hao3, which is easier to type into forms and flashcard apps. A neutral-tone syllable ends in 0, so 什么 becomes shen2 me0; change the 0 to 5 by hand if your app expects 5. "No tones" gives plain letters. "Write ü as" offers "ü (Lü)", "v (Lv)", "u (Lu)" and "yu (Lyu)". With "Tone marks" the "v" choice still shows ü, so use it with numbers or no tones.
  • Use "Name / form mode" for visas, bookings and bank forms. It turns on "No tones" and capital letters, and reads each run of 2 or 3 Chinese characters as a surname plus a joined given name: 张伟 becomes Zhang Wei and 王小明 becomes Wang Xiaoming. A run of 4 characters is split only when it starts with a compound surname such as 欧阳, giving Ouyang Nana. Put one name on each line. Pressing the button again restores your earlier tone and capital settings.
  • Check the reading of each character. The whole text is converted at once, so context decides most readings: 银行 comes out as yín háng, not yín xíng. Under "Character by character", a character with a dotted underline has more than one reading. Tap it, pick a reading, and "Auto" undoes your choice. A choice is kept only while the same character stays at that position in the text, so edit the text first and fix readings last. The buttons always show tone marks, whatever style you chose.
  • Group words and pick the separator. Without "Group words" every syllable is separated by a space. With it, syllables of one word are joined, and an "Inside a word" menu appears with "Joined (nǐhǎo)", "Space (nǐ hǎo)" and "Hyphen (nǐ-hǎo)". When joined, an apostrophe is added before a syllable that starts with a vowel, so 西安 gives xī'ān rather than xīān. Word boundaries come from your browser's word splitter, which is a general-purpose one, so check names and rare words.
  • Export for teaching and flashcards. "Copy annotated (HTML)" copies the text with the pinyin above each character, ready to paste into a word processor; plain text apps get the form 汉(hàn). "Download worksheet" saves pinyin-worksheet.html. "Export Anki TSV" writes one row per non-empty line, with the columns you tick under "Anki columns": "Hanzi", "Pinyin", "Blank meaning" and "Ruby HTML". Put one phrase on each line, and tick at least one column, or the button stays disabled.
  • Use "Pinyin to Hanzi" to find a character by its sound. Type pinyin with tone marks, tone digits or no tones: ni hao, nǐ hǎo and ni3hao3 all work, and run-together text such as nihao is split into syllables. Each syllable gets a row of characters grouped by tone, common ones first, with a "Show 12 rarer characters" style link for the rest. Tap characters to build text in "Your text", then copy it. It lists Simplified characters from the GB2312 set and is a lookup, not a typing method. The query is cut at 200 characters.

Common problems and how to fix them

It says "Could not load the Pinyin dictionary. Check your connection and try again."
The dictionary is a separate script that the page loads in the background so the first view stays light. If that request fails, for example because you are offline or a network filter or extension blocks it, the tool shows this message and cannot convert. Check the connection and reload the page. While it is loading you see "Loading dictionary…". The same message appears in "Pinyin to Hanzi" mode.
I typed one character, 乐, and got four readings: "lè yuè yào lào".
When the input is a single character, the engine returns every reading of it, and the tool shows each one as its own syllable. This is not an error. Add a second character so the engine has context: 音乐 gives yīn yuè and 乐队 gives yuè duì. Or tap the character under "Character by character" to choose one reading.
A surname is read wrongly: 曾国藩 comes out as Ceng Guofan, and 单田芳 as Dan Tianfang.
The engine uses the common reading of a character, not the surname reading: 曾 is céng here but Zēng as a surname, and 单 is dān here but Shàn as a surname. Under "Character by character", tap the character and choose zēng or shàn. The choice also applies in "Name / form mode", so the name prints as Zeng Guofan. Check every name against the person's own passport or ID spelling.
It says "Japanese kanji and Korean hanja are read as Chinese."
There is one Mandarin dictionary. Kanji in Japanese text are given Chinese readings, so 日本語の漢字 gives rì běn yǔ の hàn zì, and kana and Hangul are passed through unchanged. This is not how a Japanese or Korean reader says the word. For Japanese readings use the Japanese to Romaji Converter. Traditional characters such as 臺灣 and 學習 work.
Chinese punctuation comes out as Western punctuation, or disappears.
The tool converts full-width marks to plain ones: ,becomes a comma, 。becomes a full stop, and 《》, 「」 and curly quotes become straight quotes. There is no setting that keeps the full-width form. If you do not want any punctuation, switch off "Keep punctuation" under "More options (word grouping, capitals, ü, punctuation)". Latin letters and digits in the text are passed through as typed.

How it compares

A pinyin typing method or a dictionary app is the better choice when you need meanings, example sentences or audio. This tool only converts text you already have. It follows the tone changes that are written in the reading, so 一个 gives yí gè, 不是 gives bú shì, and 你好 stays nǐ hǎo. The readings come from a dictionary-based engine (pinyin-pro), which can be wrong with rare words, names and unusual contexts, so check anything important. The "Blank meaning" column in the Anki export is left empty for you to fill in. It covers Mandarin only, not Cantonese.

Related Tools

Frequently Asked Questions