C++C++11C++14Learn C++

This Is How To Convert u16string To A wstring In C++

What do we mean by “wide string” in a C++ app? What is a u16string? How can I convert a u16string to a wstring? Let’s answer these questions.

What is a wstring?

Wide strings are the string class for ‘wide’ characters represented by wstring. Alphanumeric characters are stored and displayed in string form. In other words wstring stores alphanumeric text with 2 or 4 byte chars. Wide strings are the instantiation of the basic_string class template that uses wchar_t as the character type. Simply we can define a wstring as below,

What is u16string?

The u16string (std::u16string or std::pmr::u16string) are the string class data types for the 16bit characters defined in the std and std::pmr namespaces. It is a string class for 16-bit characters.

This is an instantiation of the basic_string class template that uses char16_t as the character type, with its default char_traits ad allocator types. In example, the std:string uses one byte (8 bits) while the std::u16string uses two bytes (16bits) per each character of the text string. In basic string definition std::u16string is defined as std::basic_string<char16_t>. Type definition can be shown as below,

Is there a simple example of using wstring and u16string in Modern C++?

Here is a simple C++ example of how to use u16string,

How do I convert u16string to a wstring?

First, we should say that we do not recommend converting the higher byte string to a lower byte string. Currently there is no way to convert u16string to a wstring in modern C++. There is a way to convert them by using std::wstring_convert and std::codecvt_utf16 templates. In some references these both has been deprecated, however there is no good alternative thus they are not removed in most of popular C++ compilers and this means you can use them if you really need to – but do so with caution.

We can use std::wstring_convert class template to convert a u16string to a wstring. The wstring_convert class template converts byte string to wide strings using an individual code conversion facet Codecvt These standard facets suitable for use with the std::wstring_convert. We can use these with,

  • std::codecvt_utf8 for the UTF-8/UCS2 and UTF-8/UCS4 conversions
  • std::codecvt_utf8_utf16 for the UTF-8/UTF-16 conversions.

Syntax of std::wstring_convert class template (deprecated in C++17),

Syntax of std::codecvt_utf8 class template (deprecated in C++17),

Is there an example of how to convert u16string to a wstring?

Here is a example that converts u16string to a wstring,

This example works in most of C++ compilers including C++ Builder applications.

C++ Builder is the easiest and fastest C and C++ IDE for building simple or professional applications on the Windows, MacOS, iOS & Android operating systems. It is also easy for beginners to learn with its wide range of samples, tutorials, help files, and LSP support for code. RAD Studio’s C++ Builder version comes with the award-winning VCL framework for high-performance native Windows apps and the powerful FireMonkey (FMX) framework for cross-platform UIs.

There is a free C++ Builder Community Edition for students, beginners, and startups; it can be downloaded from here. For professional developers, there are Professional, Architect, or Enterprise versions of C++ Builder and there is a trial version you can download from here.

close

Oh hi there 👋
It’s nice to meet you.

Sign up to receive awesome C++ content in your inbox, every day.

We don’t spam! Read our privacy policy for more info.

About author

33+ years of coding with more than 30+ programming languages, mostly C++ on Windows, Android, Mac-OS, iOS, Linux and some other operating systems. Dr. Yilmaz Yoru was born in 1974, Eskisehir-Turkey. He graduated from the department of Mechanical Engineering of Eskisehir Osmangazi University in 1997. One year later he started to work in the same university as an assistant. He received his MSc and PhD degrees from the same department of the same university. He has married and he is a father of a son. Some of his interests are Programming, Thermodynamics, Fluid Mechanics and Artificial Intelligence. He also likes the graphical 2D & 3D design and high-end innovations.
Related posts
C++C++11C++14C++17Learn C++

How To Use The All-Powerful swscanf function In Your C++ App

C++ComponentsLanguage FeatureLearn C++

How To Use A Sharpen Effect in C+ Software On Windows?

C++C++11C++14C++17Introduction to C++Learn C++

What Is The Erase WString Method In A Modern C++ App

C++C++17Introduction to C++Learn C++

This Is How Trivial Copy Constructors Work In A C++ App