2015-10-09 3 views
0

Я хотел знать, как отображать специальные символы с printf().
Я делаю программу преобразования строк от Text до Code128 (кодировка штрих-кода).
Для этого типа кодирования мне нужно отображать символы, такие как Î, Ç, È, Ì.
C: Отображать специальные символы с printf()

Пример:
строка для преобразования: EPE196000100000002260500004N
ожидаемый результат: ÌEPEÇ3\ *R 6\ R $ÈNZÎ
результат Printf напечатал: ╠EPEÇ3\ *R 6\ R $ÇNZ╬
Printf результат изображения: [enter image description here]

EDIT: Я только можно использовать C в этом программа вообще не C++. Все ящики, которые я нашел до сих пор, находятся на C++, а не C, поэтому я спрашиваю, как это сделать с помощью C ^^

+1

Просто распечатайте их. Но обратите внимание, что на него повлияет кодирование вашей консоли или другого устройства вывода, а также кодовая страница вашего кода. Лучше использовать шестнадцатеричные коды, если вам нужны специальные коды. –

+0

ОК, попробуем это, thx много;) – MarceauC

+0

Я взял код Ascii/Hexa с http://www.ascii-code.com/ Я привязал к отображению ÌÈÎÇ с printf ("% c% c% c% c \ n ", '\ xCC', '\ xC8', '\ xCE', '\ xC7'); результат: ╠╚╬ Ã красивый, но я не ожидал ...:/У вас есть идея о том, как его исправить? ^^ ' – MarceauC

ответ

1

Если ваша консоль находится в UTF-8, можно просто распечатать шестнадцатеричное представление UTF-8 для ваших символов. См аналогичный ответ на C++ Special Characters on Console

Следующая строка печатает сердце:

printf("%c%c%c\n", '\xE2', '\x99', '\xA5'); 

Однако, так как вы печатаете '\xCC', '\xC8', '\xCE','\xC7' и у вас есть 4 различных символов это означает, что кодировка консоли является своего рода расширением ASCII. Возможно, у вас есть такая кодировка http://asciiset.com/. В этом случае вам нужны символы «x8c», «x8d». К сожалению, в этой кодировке нет капитальной версии этих символов. Итак, вам нужна другая кодировка для вашей консоли, например Latin-1, ISO/IEC 8859-1.


Для консоли Windows:

UINT oldcp = GetConsoleOutputCP(); // save current console encoding 

SetConsoleOutputCP(1252); 
// print in cp1252 (Latin 1) encoding: each byte => one symbol 
printf("%c%c%c%c\n", '\xCC', '\xC8', '\xCE','\xC7'); 

SetConsoleOutputCP(CP_UTF8); 
// 3 hex bytes in UTF-8 => one 'heart' symbol 
printf("%c%c%c\n", '\xE2', '\x99', '\xA5'); 

SetConsoleOutputCP(oldcp); 

Консоль шрифт должен поддерживать Unicode (например, 'Lucida Console'). Его можно изменить вручную в свойствах консоли, поскольку шрифтом по умолчанию может быть «Растровые шрифты».

+0

Спасибо, много! Я собираюсь расследовать таким образом :) – MarceauC

+0

Я попытался это изменить консольную кодировку #include int main() { SetConsoleOutputCP (CP_UTF8); printf ("% c% c% c% c \ n", '\ u00CE', 'Ç', 'È', 'Ì'); return 0; } но кадры, показывающие вещи, которые я не хочу видеть ... ^^ 'http://img110.xooimage.com/views/a/e/9/capture1-4d0699b.png/ – MarceauC

+0

@MarceauC Теперь это более ясно, что вы работаете с консолью Windows. Я обновил ответ на примере Windows. –

0

Я нашел его,

#include <locale.h> 
int main() 
{ 
setlocale(LC_ALL,""); 
printf("%c%c%c%c\n", 'Î', 'Ç', ' È','Ì'); 
} 

Спасибо всем за awnsers это мне очень помогает !!! :)

+0

Обратите внимание, что этот код не переносится, поскольку такие символы ('Ç') могут быть сохранены в вашем исходном файле в виде одного байта или нескольких байтов Unicode. Это зависит от вашего текстового редактора. Если текстовым редактором является Non-Unicode, двоичные коды этих символов зависят от кодировки редактора. –

Смежные вопросы