Форум русскоязычного сообщества Ubuntu


Считаете, что Ubuntu недостаточно дружелюбна к новичкам?
Помогите создать новое Руководство для новичков!

Автор Тема: Знак фунта  (Прочитано 2031 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн Scot_Tenorman

  • Автор темы
  • Любитель
  • *
  • Сообщений: 74
    • Просмотр профиля
Знак фунта
« : 15 Январь 2012, 02:43:36 »
На С++ надо написать простейшую программу. Одна и строк cout<<'\xA3'<<endl;. Где A3 это шестнадцатеричный код в таблице ASCII символа английского фунта. Я использую управляющую последовательность '\xdd', но вместо знака фунта какой-то знак вопроса в ромбе. Помогите решить эту небольшую проблему.

P.S.
Написанием прог балуюсь в Geany 0.20/

andrey_p

  • Гость
Re: Знак фунта
« Ответ #1 : 15 Январь 2012, 06:38:32 »
1. Это не код ASCII, его значение больше 0x7F - см. Википедию.
2. Вывод совершенно не зависит - Geany ты используешь или что-то еще, а вот от ОС и куда выводится - очень сильно.
3. Копать надо в сторону wchar.

Пользователь решил продолжить мысль 15 Январь 2012, 08:55:24:
PS. Если через кодирование и wchar_t, то это головняк, кажется. Нужно перекодировать из unicode в utf-8. В Линуксе (в utf-8 консоли) гораздо проще ввести с клавиатуры в строку, пользуясь либо правильным редактором, либо таблицей символов - программа из меню "стандартные", либо средствами ввода, зависимыми от ДЕ. Короче так:

#include <cstdio>

int main ()
{
    printf("It costs £10\n");
    return 0;
}
« Последнее редактирование: 15 Январь 2012, 08:58:33 от andrey_p »

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: Знак фунта
« Ответ #2 : 15 Январь 2012, 19:23:15 »
Код: C
  1. #include <stdlib.h>
  2. #include <locale.h>
  3. #include <wchar.h>
  4. #include <stdio.h>
  5.  
  6. int main()
  7. {
  8.     setlocale(LC_ALL, "");
  9.     wprintf(L"It cost £10\n");
  10.     return EXIT_SUCCESS;
  11. }
  12.  

Код: C++
  1. #include <iostream>
  2. #include <locale>
  3.  
  4. int main() {
  5.     std::locale loc("");
  6.     std::locale::global(loc);
  7.     std::wcout << L"Это стоить £10" << std::endl;
  8. }
  9.  

andrey_p

  • Гость
Re: Знак фунта
« Ответ #3 : 15 Январь 2012, 19:50:26 »
Цитировать
1. When I should use std::wstring over std::string?

On Linux? Almost never (§).
...

http://stackoverflow.com/questions/402283/stdwstring-vs-stdstring

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: Знак фунта
« Ответ #4 : 15 Январь 2012, 20:36:23 »
Ммм... ну тут всё дело в задачах и удобстве.
Можно конечно не заморачиваясь хранить UTF-8 в std::string и понимать что когда тебе понядобятся символы этой строки придётся вертеться с перекодировками и wchar_t или изначально хранить все в std::wstring ибо усилий почти не требует кроме как задать локаль ввода и локаль вывода. можно назначать разные локали на разные потоки и прочее.

А так, да, согласен. Большую часть софта даже не пытались модифицировать чтобы "типа поддержать" unicode читают пишут utf-8 и горя не знают.

Оффлайн qpalzz

  • Новичок
  • *
  • Сообщений: 45
    • Просмотр профиля
Re: Знак фунта
« Ответ #5 : 15 Январь 2012, 23:59:27 »
А еще есть библиотека glibmm (для С++), в ней есть класс ustring, через который весьма удобно работать с UTF-8 строчками

Оффлайн Yurror

  • Старожил
  • *
  • Сообщений: 1966
    • Просмотр профиля
Re: Знак фунта
« Ответ #6 : 16 Январь 2012, 07:24:01 »
qpalzz, Зачем наручным часам ядерный реактор?

Оффлайн qpalzz

  • Новичок
  • *
  • Сообщений: 45
    • Просмотр профиля
Re: Знак фунта
« Ответ #7 : 16 Январь 2012, 22:39:18 »
qpalzz, Зачем наручным часам ядерный реактор?
Точно, не заметил в первом сообщении
простейшую

 

Страница сгенерирована за 0.066 секунд. Запросов: 24.