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


Следите за новостями русскоязычного сообщества Ubuntu в Twitter-ленте @ubuntu_ru_loco

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

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) [Выделить]
#include <stdlib.h>
#include <locale.h>
#include <wchar.h>
#include <stdio.h>

int main()
{
    setlocale(LC_ALL, "");
    wprintf(L"It cost £10\n");
    return EXIT_SUCCESS;
}

Код: (CPP) [Выделить]
#include <iostream>
#include <locale>

int main() {
    std::locale loc("");
    std::locale::global(loc);
    std::wcout << L"Это стоить £10" << std::endl;
}

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.054 секунд. Запросов: 25.