Maison >développement back-end >C++ >Comment convertir une chaîne (ou char) en wstring (ou wchar_t) en C ?

Comment convertir une chaîne (ou char) en wstring (ou wchar_t) en C ?

Barbara Streisand
Barbara Streisandoriginal
2025-01-04 19:24:39156parcourir

How to Convert a String (or char) to a wstring (or wchar_t) in C  ?

C Convertir une chaîne (ou char) en wstring (ou wchar_t)

Problème :

Étant donné une variable string ou char, comment pouvons-nous attribuer son contenu à une wstring ou wchar_t variable ?

Solution :

En supposant que la chaîne d'entrée est codée en UTF-8, la bibliothèque standard (C 11 et plus récent) inclut plusieurs techniques pour conversion entre UTF-8 et UTF-16 :

#include <locale>
#include <codecvt>
#include <string>

using namespace std;

// Create a converter using the UTF-8/UTF-16 codecvt
wstring_convert<codecvt_utf8_utf16<wchar_t>> converter;

// Convert a narrow (UTF-8) string to a wide (UTF-16) string
wstring wide = converter.from_bytes(narrow);

// Convert a wide (UTF-16) string to a narrow (UTF-8) string
string narrow = converter.to_bytes(wide);

Exemple (Compilable et exécutable en ligne) :

#include <iostream>
#include <locale>
#include <codecvt>
#include <string>

int main() {
  // Sample input string in UTF-8 (see notes below for real-world scenarios):
  string s = "おはよう";

  // Create a wstring to store the converted string
  wstring ws;

  // Convert the narrow (UTF-8) string to wide (UTF-16)
  std::wstring_convert<std::codecvt_utf8_utf16<wchar_t>> conv;
  ws = conv.from_bytes(s);

  // Print the converted wstring
  wcout << ws << endl;

  return 0;
}

Remarques :

  1. Assurez-vous que la chaîne d'entrée est bien codée en UTF-8. Les encodages non UTF-8 ne produiront pas la conversion correcte.
  2. Le convertisseur codecvt_utf8_utf16 suppose un ordre d'octets petit-endien pour UTF-16. Si votre système utilise l'ordre des octets big-endian, envisagez d'utiliser codecvt_utf8 à la place.

    Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn