Panel użytkownika
Nazwa użytkownika:
Hasło:
Nie masz jeszcze konta?

konwersja string na wstring

Ostatnio zmodyfikowano 2024-06-05 22:06
Autor Wiadomość
tBane
Temat założony przez niniejszego użytkownika
konwersja string na wstring
» 2024-06-05 17:25:07
Witam.
Jak konwertować string na wstring ?

C/C++
string line = "tekst";
wstring text;
text = line;

cout << text;
P-181189
DejaVu
» 2024-06-05 17:27:19
a czemu nie użyjesz po prostu wcout? Jaki problem realnie chcesz rozwiązać? Gdzie masz tekst ASCII/Windows-CP1250 (czy jakie tam masz kodowanie), że musisz wykonywać konwersję?
P-181190
tBane
Temat założony przez niniejszego użytkownika
» 2024-06-05 17:42:47
Mam taki plik. W pliku tym są polskie znaki, na ktorych wyświetleniu mi zależy. Dlatego potrzebuję korzytstać w wstring

Dialogue/011.txt

"To jest testowa odpowiedź."
6, "Kim jesteś?"
7, "Co tutaj robisz?"
10, "Nauczysz mnie czegoś o polowaniu?"
8, "Mam skórę wilczura, chcesz ją odkupić?"
11, "Testowa opcja dialogowa"
-1, "Żegnaj"

kod wczytujący dialog
C/C++
string filename = "dialogues/011.txt";

ifstream file( filename );
if( !file.is_open() ) {
   
cout << "cant open file " << filename << "\n";
   
return;
}

string line;
wstring dialogText;

getline( file, line );
dialogText = line; // tu jest potrzebna konwersja string na wstring
wcout << dialogText;

P-181191
DejaVu
» 2024-06-05 17:43:32
To zapisz plik w Unicode, a nie w domyślnym kodowaniu Windowsa i wczytaj wstringi, a następnie użyj wcout zamiast cout.
P-181192
tBane
Temat założony przez niniejszego użytkownika
» 2024-06-05 17:47:49
Mam zapisany plik tesktowy w UTF-8.
P-181193
DejaVu
» 2024-06-05 17:50:26
No to przekonwertuj plik z UTF-8 na UNICODE, a jeżeli koniecznie chcesz już wczytywać UTF-8, to już zrób tą konwersję w kodzie, ale i tak lepiej przygotować dane na wejściu w oczekiwanym formacie.
C/C++
#include <iostream>
#include <string>
#include <locale>
#include <codecvt>

int main() {
   
std::string lineUtf8 = "tekst";
   
std::wstring text;
   
   
// Convert UTF-8 string to wstring
   
std::wstring_convert < std::codecvt_utf8_utf16 < wchar_t >> converter;
   
text = converter.from_bytes( lineUtf8 );
   
   
// Output the wstring
   
std::wcout << text << std::endl;
   
   
return 0;
}
P-181194
tBane
Temat założony przez niniejszego użytkownika
» 2024-06-05 17:56:35
No właśnie próbowałem już tę metodę i wyskakują mi błędy dosyć spore:
C:\Users\tBane\Desktop\tBane\sources&programs\RPG2D\Dialogues.hpp Błąd 279 C4996 'std::wstring_convert<std::codecvt_utf8_utf16<wchar_t,1114111,(std::codecvt_mode)0>,wchar_t,std::allocator<wchar_t>,std::allocator<char>>': warning STL4017: std::wbuffer_convert, std::wstring_convert, and the <codecvt> header (containing std::codecvt_mode, std::codecvt_utf8, std::codecvt_utf16, and std::codecvt_utf8_utf16) are deprecated in C++17. (The std::codecvt class template is NOT deprecated.) The C++ Standard doesn't provide equivalent non-deprecated functionality; consider using MultiByteToWideChar() and WideCharToMultiByte() from <Windows.h> instead. You can define _SILENCE_CXX17_CODECVT_HEADER_DEPRECATION_WARNING or _SILENCE_ALL_CXX17_DEPRECATION_WARNINGS to suppress this warning. RPG  
P-181195
DejaVu
» 2024-06-05 17:57:55
C/C++
#include <iostream>
#include <string>
#include <windows.h>

std::wstring ConvertUtf8ToWide( const std::string & utf8Str ) {
   
if( utf8Str.empty() ) {
       
return std::wstring();
   
}
   
   
int wideCharCount = MultiByteToWideChar( CP_UTF8, 0, utf8Str.c_str(), - 1, nullptr, 0 );
   
if( wideCharCount == 0 ) {
       
throw std::runtime_error( "Error in MultiByteToWideChar" );
   
}
   
   
std::wstring wideStr( wideCharCount, 0 );
   
MultiByteToWideChar( CP_UTF8, 0, utf8Str.c_str(), - 1, & wideStr[ 0 ], wideCharCount );
   
   
return wideStr;
}

int main() {
   
std::string lineUtf8 = "tekst";
   
std::wstring text;
   
   
// Konwersja stringa UTF-8 do wstring za pomocą MultiByteToWideChar
   
try {
       
text = ConvertUtf8ToWide( lineUtf8 );
   
} catch( const std::exception & e ) {
       
std::cerr << e.what() << std::endl;
       
return 1;
   
}
   
   
// Wyświetlenie wstringa
   
std::wcout << text << std::endl;
   
   
return 0;
}
P-181196
« 1 » 2 3 4
  Strona 1 z 4 Następna strona