How to display japanese Kanji inside a cmd window under windows?

38,720

Solution 1

If you find a font that will display the Kanji character set, you can add that font to the cmd Settings by adding values under this Registry key:

HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Console\TrueTypeFont\

Values:

Name: 00
Data: Consolas

I've done this before but found this reference on SuperUser: https://superuser.com/q/55318

Hope this helps

Solution 2

How is your application writing output? The C byte-based stdio calls like printf won't support UTF-8 on Windows unless you have specifically set the console to use UTF-8 encoding by saying chcp 65001 && somecommand (and even then there are problems).

Without chcp, the console will be using the Windows installation's default code page, in this case cp1252, and writing in kanji will be impossible even if the console font you're using has glyphs for it.

If you want to write Unicode to the console reliably you would have to use character-based interfaces like wprintf.

Solution 3

This is how I can got Chinese input/output in cmd.exe running on Windows 7 Pro English Version.

  1. Install console2, which is a front-end to cmd.exe (and other shells).

  2. After installation, follow the instruction here

    • Delete key "Console2 command window" in registry
    • Import the following data into windows registry:

    • For Chinese(中文) Windows XP & Vista:

      Windows Registry Editor Version 5.00
      [HKEY_CURRENT_USER\Console\Console2 command window]
      "CodePage"=dword:000003a8
      "FontSize"=dword:000a0000
      "FontFamily"=dword:00000036
      "FontWeight"=dword:00000190
      "FaceName"="細明體"
      "HistoryNoDup"=dword:00000000
      
    • For Japanese(日本語) Windows XP & Vista:

      Windows Registry Editor Version 5.00
      [HKEY_CURRENT_USER\Console\Console2 command window]
      "CodePage"=dword:000003a8
      "FontSize"=dword:000a0000
      "FontFamily"=dword:00000036
      "FontWeight"=dword:00000190
      "FaceName"="MS 明朝"
      "HistoryNoDup"=dword:00000000
      
  3. You may or may not have to change the font. Initially I had the font set to @NimSum, and the Chinese characters came out rotate 90 degrees. Then I switched to NimSum (without the @) and it came out correctly. Then just out of curiosity I switched to Consola and yet I can still see the Chinese Characters. So not sure if you actually have to set the font or not.

Solution 4

Consolas (even on Windows 10) does not display Japanese characters correctly in a console; I checked the font in Character Map and it simply doesn't have glyphs for any SE Asian languages. You need to set your console font to MS Mincho or a similar Asian-supporting font to show Japanese characters. This will also change backslashes to yen symbols which is a standard thing on Japanese systems. You don't need to change your code page or locale settings, but you will need to at least install Japanese language support to get the Japanese fonts installed. On NT5 systems like Windows Server 2003 and Windows XP, there's a checkbox somewhere in the regional and language options for it; on NT6 (Vista and later) you can just add the Japanese IME and it'll install the required files.

Share:
38,720
jdehaan
Author by

jdehaan

Jaap de Haan is an experienced software designer and developer. His programming experience started in BASIC + Z80 assembly on MSX home computers. C#, C/C++, Python, Java are his favorite languages. For Web development reactjs, javascript and python are his languages of choice.

Updated on July 18, 2022

Comments

  • jdehaan
    jdehaan 10 months

    I have an english Windows 2003 server with asiatic language support activated. The two only fonts available for the command window (cmd settings) are raster and lucida console. Neither the one nor the other display the Kanji correctly (displayed as question mark).

    Is there a solution to get them displayed? Is there some transformation I must do in my application before writing out to the console?

    I am writing UTF8 out at the moment, what works well also for some non ASCII characters (like öäüß). The source code writing to the console has the correct data (the Kanji can be viewed in the debugger correctly). If it matters, I am writing the app in C#.

    EDIT: I found this link which explains the issues behind the problem and presents a solution (involving native calls) for C#. This shall work well with .NET 4.5 (untested by me)

  • jdehaan
    jdehaan over 12 years
    Good tip. Unfortunately it didn't work out for me and the Kanjis. Note that it only fixed fonts like "Courier New" appear in the selection for the console. Setting not fixed fonts in the registry has no effect. I think it is maybe due to some links in the fonts. In the case of "Arial Unicode MS" it switched to "Mincho" in the character map when I select the Kanji range... Strange stuff :-)
  • jdehaan
    jdehaan over 12 years
    +1, thanks for this hint too, it seems indeed to be a codepage issue in the end. I thought cmd.exe was a unicode program but actually it appears not to be. The things that can be tuned in the registry (see answer from paludarium) show how to bind the codepage to the actual used font... I begin to see light at the end of the tunnel!
  • Amit Patil
    Amit Patil over 12 years
    cmd.exe can display Unicode characters, but only if the process it is running passes it Unicode, via wprintf or Win32 WriteConsoleW. Most command-line software, however, uses the C stdio byte-based output functions like printf, so you'll be limited by the codepage. It is very unfortunate that on Windows the system default codepage can never be 65001 (UTF-8), and that there are some serious bugs with setting chcp 65001 at all. Every other OS has standardised on UTF-8, allowing any old byte-based console app to do something sensible with Unicode.
  • jdehaan
    jdehaan over 12 years
    Console.OutputEncoding = Encoding.UTF8; AND setting the font to "Consolas" works out. However I get weird errors on the font size when I go to the console font configuration again...
  • jdehaan
    jdehaan over 12 years
    On the one machine Consolas was not available. I tested on another one and this font seems really to work well. Just the legal impact on the font use (reserved for VS Studio licensees) is a bit problematic... At least on the development machine It works. I just have to find a free font that does the same.
  • jdehaan
    jdehaan over 12 years
    HKEY_CURRENT_USER\Console also provides interesting tweaking possibilities
  • jdehaan
    jdehaan over 12 years
    I hope you don't mind too much I accorded the accept to paludarium. Actually both combined answers are correct, but I had to make a choice. I've chosen the one with the lesser SO score.
  • jdehaan
    jdehaan over 12 years
    It really turns out that despite right encoding, the console could not always display the chars correctly (ending with boxes or interrogation marks) depending on the font used. So the font setting is essential for the stuff to work properly.
  • Nikolai
    Nikolai about 8 years
    I don't see how this answers the question. What's "Name: 00 Data: Consolas"? Why is this the accepted answer?