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
» 2024-06-05 18:13:30
również nie działa :-/
źle wyświetla mi wstring'ów..

C/C++
wcout << L"WCZYTUJE DIALOG 11\n";
string filename = "dialogues/011.txt";

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

string lineUTF8;
wstring dialogText;
int id = 11;

getline( file, lineUTF8 );
dialogText = ConvertUtf8ToWide( lineUTF8 );
cout << "UTF-8: " << lineUTF8 << "\n";
wcout << "wstring: " << dialogText << L"\n";

// stworzenie dialogu
Dialogue * dial = new Dialogue( id, dialogText );
dialogues.push_back( dial );

// wczytanie odpowiedzi do dialogu
while( std::getline( file, lineUTF8 ) ) {
   
cout << "UTF-8: " << lineUTF8 << "\n";
   
wcout << L"wstring: " << ConvertUtf8ToWide( lineUTF8 ) << L"\n";
}

file.close();


WCZYTUJE DIALOG 11
UTF-8: "To jest testowa odpowied┼║."
wstring: "To jest testowa odpowiedUTF-8: 6, "Kim jesteś?"
UTF-8: 7, "Co tutaj robisz?"
UTF-8: 10, "Nauczysz mnie czegoś o polowaniu?"
UTF-8: 8, "Mam sk├│r─Ö wilczura, chcesz j─à odkupi─ç?"
UTF-8: 11, "Testowa opcja dialogowa"
UTF-8: -1, "┼╗egnaj"
P-181197
DejaVu
» 2024-06-05 18:16:56
Ale Ty masz problem z wiadomościami w konsoli czy w SFML-u? Bo wydawało mi się, że chcesz prezentować wiadomości w grze (SFML), a nie w konsoli.

/edit:
Możesz jeszcze profilaktycznie sprawdzić czy zadziała:
C/C++
wprintf( L"%s\n", dialogText.c_str() );
P-181198
tBane
Temat założony przez niniejszego użytkownika
» 2024-06-05 18:28:21
Dobra, w konsoli i tak się wykrzacza, ale w SFML działa, tak jak mówiłeś. Dzięki za pomoc :-)
C/C++
wcout << L"WCZYTUJE DIALOG 11\n";
string filename = "dialogues/011.txt";

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

string lineUTF8;
wstring linewstring;
int id = - 1;

getline( file, lineUTF8 );
linewstring = ConvertUtf8ToWide( lineUTF8 );

// stworzenie dialogu
Dialogue * dial = new Dialogue( 11, linewstring );

// wczytanie odpowiedzi do dialogu
while( std::getline( file, lineUTF8 ) ) {
   
linewstring = ConvertUtf8ToWide( lineUTF8 );
   
dial->options.push_back( DialogueOption( id, linewstring ) );
}

// dodanie dialogu do listy wszystkich dialogow
dialogues.push_back( dial );

file.close();
P-181199
DejaVu
» 2024-06-05 18:38:45
Jak chcesz, aby Unicode działał w konsoli na Windowsie to:
C/C++
#include <iostream>
#include <io.h>
#include <fcntl.h>

int main()
{
   
_setmode( _fileno( stdout ), _O_U16TEXT );
   
std::wstring text = L"ąęółźńąźść";
   
wprintf( L"Polskie znaki: %s\n", text.c_str() );
   
std::wcout << L"Polskie znaki: " << text << std::endl;
   
return 0;
}

Przynajmniej u mnie po użyciu tego _setMode zadziałało.
P-181200
tBane
Temat założony przez niniejszego użytkownika
» 2024-06-05 18:59:08
Jeszcze występuje jeden błąd. Dodaje jakiś dziwny znak na końcu na końcu każdej linii.

textPart.erase(textPart.size()-1);
textPart.erase(textPart.pop_back());
Oba nie pomogły, pousuwało znaki zapytania(ostatnie znaki stringa). Stąd wnioskuję, że ten dziwny znak, to jakiś znak oznaczający koniec stringa. Nie wiem jak się go pozbyć :-/

P-181201
DejaVu
» 2024-06-05 19:35:42
Na końcu masz zapewne znaki "\r\n". być może \r jest wyświetlany jako kwadrat, więc możesz po prostu zrobić replace "\r\n" na "\n" po wczytaniu wiersza z pliku.
P-181202
tBane
Temat założony przez niniejszego użytkownika
» 2024-06-05 19:50:01
Podmiana "\r\n" i "\r" na "\n" nie pomogła

C/C++
void replaceAll( std::string & str, const std::string & from, const std::string & to ) {
   
size_t start_pos = 0;
   
while(( start_pos = str.find( from, start_pos ) ) != std::string::npos ) {
       
str.replace( start_pos, from.length(), to );
       
start_pos += to.length(); // Zmieniamy start_pos o długość "to" aby uniknąć zapętlenia
   
}
}

C/C++
string lineUTF8;
getline( file, lineUTF8 );
replaceAll( lineUTF8, "\r\n", "\n" );
replaceAll( lineUTF8, "\r", "\n" );
P-181203
pekfos
» 2024-06-05 20:07:13
A nie możesz po prostu zobaczyć co to za krzak? Nie wiem, debuggerem? Czemu to zgadujecie?
P-181205
1 « 2 » 3 4
Poprzednia strona Strona 2 z 4 Następna strona