• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

Używanie znaków Unicode w konsoli

Konkurs Mistrz Programowania
0 głosów
3,216 wizyt
pytanie zadane 4 października 2018 w C i C++ przez multim Obywatel (1,830 p.)
IDE: Code::Blocks (CP-1250), konsola cmd: (CP-852).

Próbowałem użyć kodu "\u00B0", żeby otrzymać znak stopnia (°) niestety zamiast tego wyświetla się zupełnie inny znak. Dotyczy to również innych kodów zarówno z tabeli dla CP-1250 i CP-852.

Gdzie można znaleźć tabelę kodów Unicode, które będą poprawnie interpretowane przez konsolę Windows?

4 odpowiedzi

+1 głos
odpowiedź 4 października 2018 przez mokrowski Mędrzec (158,940 p.)

Kod znaku temperatury w cp852 to 0xF8:

https://en.wikipedia.org/wiki/Code_page_852

Do flag kompilatora dodaj:

-exec-charset=cp852

Przykład:

#include <iostream>

int main() {
    std::cout << "Temperatura: 36.6\xF8\n";
}

 

0 głosów
odpowiedź 4 października 2018 przez RafalS VIP (122,820 p.)
edycja 4 października 2018 przez RafalS

https://www.youtube.com/watch?v=9SnZMDONhFU

W skrócie - ustaw wszędzie to samo kodowanie.

Konsola: https://stackoverflow.com/questions/388490/how-to-use-unicode-characters-in-windows-command-line/388500#388500

Codeblocks: https://forum.pasja-informatyki.pl/22262/kodowanie-codeblocks#voting_22264

https://en.cppreference.com/w/cpp/language/string_literal

Spróbuj po prostu wstawić do kodu znak, który chcesz wypisać (w normalnej formie, bez podawania kodu znaku):

std::cout<< u8"Ǽ˪ϻ"<<std::endl;

 

komentarz 4 października 2018 przez multim Obywatel (1,830 p.)
Wydaje mi się, że rozwiązenie które proponujesz jest bardzo niebezpieczne. Na stackoverflow, w pytaniu do którego podałeś link jest wiele odpowiedzi i komentarzy, które zdecydowanie odradzają stosowanie tego rozwiązania.
Dodatkowo zmiana strony kodowej nie wpłynęła na wynik. Nadal wyświetla się znak "┬" zamiast "°".

Chciałbym, żeby rozwiązanie nie wiązało się z zmianą domyślnych ustawień systemu. Wolałbym znaleźć tablicę kodową która pozwalałaby mi poprawnie korzystać z literałów Unicode tzn. "\u00B0" daje "°" itd.
komentarz 4 października 2018 przez multim Obywatel (1,830 p.)

@RafalS, Nadal to samo, na wyniku mam "┬".

 

0 głosów
odpowiedź 4 października 2018 przez criss Mędrzec (172,570 p.)
Żeby poprawnie wyświetlać unicode, musisz mieć w konsoli ustawione kodowanie które na to pozwoli. Potrzebujesz UTF-8, jednak o ile dobrze kojarzę, to tylko Win10 daje możliwość UTF-8 w konsoli.
0 głosów
odpowiedź 4 października 2018 przez multim Obywatel (1,830 p.)
edycja 18 października 2018 przez multim

Code::Blocks nie umożliwia czytelnej pracy w CP-852 (które jest domyślną stroną kodową w konsoli) w swoim edytorze tak jak np. Visual Studio, które ma też pomocne funkcje jak setlocale(). 

Istnieją co najmniej 3 rozwiązania mojego problemu:

1. Edytować plik źródłowy w zewnętrznym edytorze i zapisać go z użyciem kodowania OEM 852. W Code::Blocks polskie znaki i np. znak ° są nieczytelne, ale konsola i zewnętrze edytory wyświetlają je poprawnie.

2. Używać tabeli ASCII i ósemkowych kodów dla dostępnych znaków np. https://theasciicode.com.ar/
Jak używać? Przykład:
Odnaleźć kod znaku ASCII dla symbolu ° - jest to 248 dziesiętnie.
Po zamianie na system ósemkowy otrzymujemy 370.
Wystarczy wstawić ciąg "\370" do łańcucha znaków, w który chcemy użyć znaku.

std::cout << "temperatura wyra\276ona w \370 Celsjusza: ";

3. I chyba najprzyjemniejszy: W edytorze pozostawić domyślne kodowanie i skorzystać z biblioteki <locale.h> lub <clocale>

i wywołać funkcję:

setlocale(LC_ALL, "");

od tej pory symbole Unicode wyświetlane w C::B wyświetlą się również poprawnie w konsoli.

Podobne pytania

+1 głos
1 odpowiedź 419 wizyt
+1 głos
1 odpowiedź 646 wizyt
0 głosów
1 odpowiedź 526 wizyt
pytanie zadane 11 grudnia 2022 w HTML i CSS przez Jerzy Użytkownik (950 p.)

93,656 zapytań

142,577 odpowiedzi

323,100 komentarzy

63,174 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Kursy INF.02 i INF.03
...