• 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

VPS Starter Arubacloud
0 głosów
1,997 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 (155,460 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,590 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ź 200 wizyt
+1 głos
1 odpowiedź 427 wizyt
pytanie zadane 5 lipca 2021 w Python przez KumberTwo Dyskutant (8,270 p.)
0 głosów
1 odpowiedź 198 wizyt
pytanie zadane 11 grudnia 2022 w HTML i CSS przez Jerzy Użytkownik (870 p.)

92,452 zapytań

141,262 odpowiedzi

319,085 komentarzy

61,854 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.

Akademia Sekuraka

Akademia Sekuraka 2024 zapewnia dostęp do minimum 15 szkoleń online z bezpieczeństwa IT oraz dostęp także do materiałów z edycji Sekurak Academy z roku 2023!

Przy zakupie możecie skorzystać z kodu: pasja-akademia - użyjcie go w koszyku, a uzyskacie rabat -30% na bilety w wersji "Standard"! Więcej informacji na temat akademii 2024 znajdziecie tutaj. Dziękujemy ekipie Sekuraka za taką fajną zniżkę dla wszystkich Pasjonatów!

Akademia Sekuraka

Niedawno wystartował dodruk tej świetnej, rozchwytywanej książki (około 940 stron). Mamy dla Was kod: pasja (wpiszcie go w koszyku), dzięki któremu otrzymujemy 10% zniżki - dziękujemy zaprzyjaźnionej ekipie Sekuraka za taki bonus dla Pasjonatów! Książka to pierwszy tom z serii o ITsec, który łagodnie wprowadzi w świat bezpieczeństwa IT każdą osobę - warto, polecamy!

...