Incorrect character encoding in PuTTY can turn remote output into garbled text, broken box-drawing characters, and unreadable non-English characters, especially when the remote system is using a UTF-8 locale but the terminal is interpreting bytes using a different character set.

PuTTY does not negotiate character encoding with the remote host, so the terminal must be told how to decode incoming bytes. The setting is controlled by Remote character set under WindowTranslation, which tells PuTTY how to translate the remote stream into Unicode for display on Windows.

The encoding choice is saved per session profile, so updating and saving the session keeps UTF-8 for future connections. Selecting the wrong character set does not change the remote system, but it can make text appear corrupted until the correct encoding is selected, and a Unicode-capable font is still required for some glyphs.

Steps to set UTF-8 encoding in PuTTY:

  1. Launch PuTTY.
  2. Select the saved session to update under Saved Sessions.
  3. Click Load to open the saved session settings for editing.
  4. Open WindowTranslation in the category tree.
  5. Set Remote character set to UTF-8.

    If box-drawing characters still look wrong, enable Use Unicode line drawing code points on the same Translation page.

  6. Select a Unicode-capable font under WindowAppearance if characters appear as empty squares.

    Consolas and Cascadia Mono commonly include the glyphs needed for modern UTF-8 terminal output on Windows.

  7. Return to the Session category.
  8. Click Save to store the UTF-8 setting in the session profile.

    Apply UTF-8 to all new sessions by loading Default Settings, changing Translation to UTF-8, and saving Default Settings.

  9. Click Open to connect using the updated session.
  10. Run a UTF-8 test string on the remote host and confirm symbols render correctly.
    $ printf 'UTF-8: ✓ — Привет — 日本語\n'
    UTF-8: ✓ — Привет — 日本語
    $ printf 'Box:\n┌─┐\n│ │\n└─┘\n'
    Box:
    ┌─┐
    │ │
    └─┘

    If output is still garbled with UTF-8 selected, confirm the remote locale is a UTF-8 variant (for example, en_US.UTF-8) and retry with a Unicode-capable font.