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 ? string line = "tekst"; wstring text; text = line;
cout << text;
|
|
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ę? |
|
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 wstringDialogue/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 dialogstring 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; wcout << dialogText;
|
|
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. |
|
tBane Temat założony przez niniejszego użytkownika |
» 2024-06-05 17:47:49 Mam zapisany plik tesktowy w UTF-8. |
|
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. #include <iostream> #include <string> #include <locale> #include <codecvt>
int main() { std::string lineUtf8 = "tekst"; std::wstring text; std::wstring_convert < std::codecvt_utf8_utf16 < wchar_t >> converter; text = converter.from_bytes( lineUtf8 ); std::wcout << text << std::endl; return 0; }
|
|
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
|
|
DejaVu |
» 2024-06-05 17:57:55 #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; try { text = ConvertUtf8ToWide( lineUtf8 ); } catch( const std::exception & e ) { std::cerr << e.what() << std::endl; return 1; } std::wcout << text << std::endl; return 0; }
|
|
« 1 » 2 3 4 |