Autor Wątek: Lua i c++, brak polskich znaków  (Przeczytany 2438 razy)

Offline Dash

  • Użytkownik

# Sierpień 27, 2015, 03:34:45
Witam,
zarówno w c++ (setlocale(LC_ALL,"")), jaki i Lua mam polskie znaki, problem zaczyna się gdy z poziomu c++ wczytuję stringi znajdujące się w skrypcie. Pojawiają się niemiłosierne krzaki, czy istnieje sposób na pozbycie się tego?

Offline Mr. Spam

  • Miłośnik przetworów mięsnych

Offline Xender

  • Użytkownik

# Sierpień 27, 2015, 11:25:08
Upewnij się, że wszędzie masz UTF-8 - tzn. że wszystkie pliki są w nim zapisane, wszystkie biblioteki renderujące tekst go przyjmują (w tych gorszych czasem trzeba manualnie przekonwertować na jakiś inny UTF lub UCS), i wszystkie wejścia od użytkownika też przychodzą w UTF-8 (lub innym kodowaniu Unicode i są na UTF-8 konwertowane).

Offline Dash

  • Użytkownik

  • +1
# Sierpień 27, 2015, 12:13:32
Dzięki, przy sprawdzaniu jak lua to wysyła na stos, okazało się że pomogło przekonwertowanie pliku lua z utf8 na ANSI. Z jakiś względów, moje IDE zupełnie olewa zmiany kodowania, dlatego wszystko musi być kodowane w "jego" ANSI.

Offline Xender

  • Użytkownik

  • +2
# Sierpień 27, 2015, 22:51:57
Z jakiś względów, moje IDE zupełnie olewa zmiany kodowania, dlatego wszystko musi być kodowane w "jego" ANSI.
Co to za IDE?

Polecałbym wymienić je na coś, co normalnie obsługuje UTF-8.

Offline Dash

  • Użytkownik

# Sierpień 28, 2015, 23:24:56
Code::Blocks, i teoretycznie utf-8 mam ustawione nawet jako domyślne. Ale cóż, do końca projektu porobię w ANSI a potem reinstall. Swoją drogą, na linuksie takich problemów nie ma. 

Offline Raptor

  • Użytkownik

# Sierpień 28, 2015, 23:50:58
Edit->File encoding, z tego co widzę 9 różnych opcji unicode. I tak, naprawdę działają :)

Offline Xirdus

  • Redaktor

  • +1
# Sierpień 29, 2015, 12:47:09
Jest jeszcze jedna sprawa - to że w pliku używasz kodowania A nie przeszkadza kompilatorowi przerobić wszystkich stringów na kodowanie B. W C++11 możesz dać stringom prefiks "u", "U" lub "u8" żeby wymusić odpowiednio UTF-16, UTF-32 i UTF-8 - jeśli kompilator je wspiera, powinno załatwić sprawę.

Offline Xender

  • Użytkownik

  • +2
# Sierpień 29, 2015, 15:32:12
@up - Tak, tylko, że wtedy kompilator musi jeszcze znać oryginalne kodowanie pliku źródłowego, a to już nie brzmi tak prosto. Więc najlepiej i plik mieć zapisany w UTF-8.

Można też w ogóle unikać tego problemu poprzez stosowanie w stringach sekwencji \u czy podobnych.