Home Backend Development C++ How to Display UTF-8 Strings Correctly on Windows Console: A Comprehensive Guide?

How to Display UTF-8 Strings Correctly on Windows Console: A Comprehensive Guide?

Oct 29, 2024 pm 06:41 PM

How to Display UTF-8 Strings Correctly on Windows Console: A Comprehensive Guide?

UTF-8 Output in Windows: A Comprehensive Guide

Windows presents a unique challenge when writing cross-platform applications in C that rely on UTF-8 encoded strings. Unlike Unix systems, which automatically interpret 8-bit strings as UTF-8, Windows requires a specific configuration to do the same.

Consider the following code:

<code class="cpp">#include &lt;string&gt;
#include &lt;iostream&gt;

int main() {
    std::string test = u8"Greek: αβγδ; German: Übergrößenträger";
    std::cout &lt;&lt; test;
    return 0;
}</code>
Copy after login

On Unix systems, this code will render the desired characters correctly. However, on Windows, it will display garbled text due to std::cout's default expectation of 8-bit strings in Latin-1 or similar non-Unicode format.

To resolve this issue, Windows requires two configuration steps:

1. Setting Console Code Page to UTF-8

This informs the console to interpret the byte stream it receives as UTF-8:

<code class="cpp">SetConsoleOutputCP(CP_UTF8);</code>
Copy after login

2. Enabling Buffering in std::cout

The Visual Studio STL implementation of std::basic_filebuf can pass UTF-8 sequences as individual bytes, leading to incorrect console interpretation. By enabling buffering, we ensure that strings are passed in their entirety:

<code class="cpp">setvbuf(stdout, nullptr, _IOFBF, 1000);</code>
Copy after login

With these configurations, UTF-8 strings will be accurately displayed on the Windows console. However, it's important to note that Windows consoles still have legacy issues:

  • Raster Fonts: These fonts ignore the console's code page, requiring the use of TrueType fonts for non-ASCII Unicode characters.
  • Windows 7 Default Font: Until Windows 10, the default font was a raster font, requiring manual configuration to a TrueType font.

By incorporating both code and context, this revised answer provides a comprehensive step-by-step solution for printing UTF-8 strings on Windows, addressing both historical and modern considerations.

The above is the detailed content of How to Display UTF-8 Strings Correctly on Windows Console: A Comprehensive Guide?. For more information, please follow other related articles on the PHP Chinese website!

Statement of this Website
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn

Hot Article Tags

Notepad++7.3.1

Notepad++7.3.1

Easy-to-use and free code editor

SublimeText3 Chinese version

SublimeText3 Chinese version

Chinese version, very easy to use

Zend Studio 13.0.1

Zend Studio 13.0.1

Powerful PHP integrated development environment

Dreamweaver CS6

Dreamweaver CS6

Visual web development tools

SublimeText3 Mac version

SublimeText3 Mac version

God-level code editing software (SublimeText3)

What are the types of values ​​returned by c language functions? What determines the return value? What are the types of values ​​returned by c language functions? What determines the return value? Mar 03, 2025 pm 05:52 PM

What are the types of values ​​returned by c language functions? What determines the return value?

Gulc: C library built from scratch Gulc: C library built from scratch Mar 03, 2025 pm 05:46 PM

Gulc: C library built from scratch

C language function format letter case conversion steps C language function format letter case conversion steps Mar 03, 2025 pm 05:53 PM

C language function format letter case conversion steps

What are the definitions and calling rules of c language functions and what are the What are the definitions and calling rules of c language functions and what are the Mar 03, 2025 pm 05:53 PM

What are the definitions and calling rules of c language functions and what are the

Where is the return value of the c language function stored in memory? Where is the return value of the c language function stored in memory? Mar 03, 2025 pm 05:51 PM

Where is the return value of the c language function stored in memory?

distinct usage and phrase sharing distinct usage and phrase sharing Mar 03, 2025 pm 05:51 PM

distinct usage and phrase sharing

How do I use algorithms from the STL (sort, find, transform, etc.) efficiently? How do I use algorithms from the STL (sort, find, transform, etc.) efficiently? Mar 12, 2025 pm 04:52 PM

How do I use algorithms from the STL (sort, find, transform, etc.) efficiently?

How does the C   Standard Template Library (STL) work? How does the C Standard Template Library (STL) work? Mar 12, 2025 pm 04:50 PM

How does the C Standard Template Library (STL) work?

See all articles