Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 15, средняя оценка - 4.93
ipoder
1 / 1 / 0
Регистрация: 23.06.2012
Сообщений: 18
#1

Русские символы из ASCII - C++

18.07.2012, 09:08. Просмотров 1881. Ответов 16
Метки нет (Все метки)

Программа отправляет "POST" запрос в гугл Speech и сохраняет ответ. Но сохраняет в ASCII. Текстовый редактор читает это нормально, а вот уже из программы открыть этот файл и сохранить нужный текст без иероглифов нормально не могу. Если создать свой текстовый файл и заполнить его так-же самому, то все отлично работает.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
#include <tchar.h>
#include <cstdlib>
#include <fstream>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <Windows.h>
 
using namespace std;
 
std::ifstream input;
HGLOBAL hGlob;
char texty[700];
char ontexty[700];
size_t sizet = 0;
int main(int nNumberofArgs, char* pszArgs[])
{
    po[699] = 0;
    texty[699] = 0;
    ontexty[699] = 0;
    input.open("d:\\Programm\\upload.txt");
    input.getline(texty, 500);
    texty[699] = 0;
    for(int ryt = 83; texty[ryt] != ('"'); ryt++)
    {
        ontexty[sizet] = texty[ryt];
        sizet++;
    }
    ontexty[699] = 0;
    sizet++;
   OpenClipboard(NULL);
   // Remove the current Clipboard contents
  EmptyClipboard();
   // Get the currently selected data
   HGLOBAL hGlob = GlobalAlloc(GMEM_FIXED, sizet);
   memcpy(GlobalLock(hGlob), ontexty, sizet);
   // For the appropriate data formats...
   if ( ::SetClipboardData(CF_TEXT | CF_OEMTEXT, hGlob ) == NULL )
   {
      CloseClipboard();
      GlobalFree(hGlob);
   }
   CloseClipboard();
    
 
    system("PAUSE");
    return 0;
}
Заранее спасибо.

P.S. Единственное, что известно, так это на каждую русскую букву уходит по 1 лишнему байту, то есть буква занимает 2 байта. С Английским все норм.
Вложения
Тип файла: txt upload.txt (123 байт, 22 просмотров)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.07.2012, 09:08     Русские символы из ASCII
Посмотрите здесь:

Перевести в ASCII код русские буквы - C++
Ребят, возникла проблема перевод в ascii код русские буквы. В инетрнете нашел что надо использовать unsigned char но он не правильно...

Вывести на консоль русские буквы, используя ASCII-коды - C++
С англ и т.д. всё работает нормально, но как только пытаюсь вытащить код символа русской буквы, так VS2013 выдает отрицательное значение. ...

Ascii символы - C++
Добрый день, подскажите почему неправильно выводятся русские заглавные буквы? Английские выводятся. void ascii( const char* text, char*...

Конвертер в символы ASCII - C++
Нужно написать програму которая из файла берет даные и конвертирует их в код ASCII и потом записывает их в другой файл. Как это сделать?

Русские символы!!!! - C++
Для русских символов я использую библиотеку #include &lt;russian.h&gt; Все работает нормально без using namespace std; #include...

Русские символы - C++
Написал программу. Компилю из под cygwin g++. Ругается: 4.cpp:27:18: предупреждение: многознаковая символьная константа if((str...

Русские символы - C++
Подскажите пожалуйста как сделать правильный вывод русского алфавита, так как при выводе выдает иероглифы, есть задавать данные изначально,...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ipoder
1 / 1 / 0
Регистрация: 23.06.2012
Сообщений: 18
18.07.2012, 09:25  [ТС]     Русские символы из ASCII #2
Скорее всего закодировано под KOI8-R, но как этим воспользоваться?
ipoder
1 / 1 / 0
Регистрация: 23.06.2012
Сообщений: 18
19.07.2012, 21:40  [ТС]     Русские символы из ASCII #3
Если никто не знает, тогда киньте пожалуйста эту тему в "для экспертов". А то у меня нет "прав".
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.07.2012, 21:58     Русские символы из ASCII #4
Вот тут похожая тема. UTF-8 - русские символы в char посимвольно
ipoder
1 / 1 / 0
Регистрация: 23.06.2012
Сообщений: 18
19.07.2012, 22:23  [ТС]     Русские символы из ASCII #5
alsav22, спасибо. За пару секунд до вашего сообщения при помощи http://www.artlebedev.ru/tools/decoder/ понял, что это UTF-8. Спасибо.

Добавлено через 9 минут
Еще вопрос появился: А на что заменить input.getline(texty, 500), так как она не хочет работать с wchar_t
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
19.07.2012, 22:33     Русские символы из ASCII #6
Цитата Сообщение от ipoder Посмотреть сообщение
А на что заменить input.getline(texty, 500), так как она не хочет работать с wchar_t
Вот так, вроде бы, соглашается:
C++
1
std::wifstream input;
ipoder
1 / 1 / 0
Регистрация: 23.06.2012
Сообщений: 18
19.07.2012, 23:13  [ТС]     Русские символы из ASCII #7
Все равно не распознает тест, то есть получаю чуть другие кракозябры.
OstapBender
583 / 521 / 35
Регистрация: 22.03.2011
Сообщений: 1,585
20.07.2012, 02:15     Русские символы из ASCII #8
банально локаль ставить не пробывали?
Русские шрифты в консоли

ПС: только дня 2 назад пытался скопировать в буфер обмена русский текст, в итоге часа мучений ничего не вышло*(
ipoder
1 / 1 / 0
Регистрация: 23.06.2012
Сообщений: 18
20.07.2012, 10:59  [ТС]     Русские символы из ASCII #9
OstapBender, конечно пробывал и не работает. Это мне просто мозг выносит(
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.07.2012, 20:22     Русские символы из ASCII #10
Цитата Сообщение от ipoder Посмотреть сообщение
OstapBender, конечно пробывал и не работает. Это мне просто мозг выносит(
Странный файлик. У меня с ним тоже ничего не получилось. Может его в отдельную тему вынести, без кода? Мол, есть файл, как его корректно вывести на консоль.

Добавлено через 3 часа 39 минут
Если этот файл сохранить как ANSI, то потом он нормально выводится. Может кто знает, как в С++ через код это сделать?
ValeryS
Модератор
6537 / 5003 / 460
Регистрация: 14.02.2011
Сообщений: 16,642
20.07.2012, 20:52     Русские символы из ASCII #11
Цитата Сообщение от ipoder Посмотреть сообщение
так это на каждую русскую букву уходит по 1 лишнему байту, то есть буква занимает 2 байта.
посмотри в бинарном формате если через байт есть число 0х04 это Юникоде
а если нет то какая то кодировка если два байта то это действительно KOI8 но в кириллице есть и KOI8-U и KOI8-R

Добавлено через 17 минут
скачал файлик запустил в блокноте
{"status":0,"id":"7efc88a99dcc05fca219c80755c4c9a8-1","hypotheses":[{"utterance":"быстро","confidence":0.42369488}]}
судя по всему обычная виндос кодировка
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.07.2012, 20:57     Русские символы из ASCII #12
Цитата Сообщение от ValeryS Посмотреть сообщение
запустил в блокноте
Проблема в выводе на консоль. Вместо "быстро" иероглифы, и никак не получается исправить. Блокнот, при сохранении, показывет, что это UTF-8. Если сохранить как ANSI, то потом на консоль выводится без проблем. Как его в программе перекодировать?
ValeryS
Модератор
6537 / 5003 / 460
Регистрация: 14.02.2011
Сообщений: 16,642
20.07.2012, 21:01     Русские символы из ASCII #13
оперой определил что это UTF-8
а это юникоде кастрированый

Добавлено через 2 минуты
покажи как выводишь и как конвертируешь?
не всю программу а строки кода

Добавлено через 53 секунды
консоль работает в досовской кодировке необходимо конвертировать
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
20.07.2012, 21:12     Русские символы из ASCII #14
Цитата Сообщение от ValeryS Посмотреть сообщение
Добавлено через 2 минуты
покажи как выводишь и как конвертируешь?
не всю программу а строки кода
У тебя он нормально на консоль выводится? Как конвертировать я не знаю. Сохранил его в четырёх вариантах (какие блокнот позволяет) и вывожу через этот код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <iostream>
#include <fstream>
#include <Windows.h>
using namespace std;
 
int main()
{
    //setlocale(0, "");
    SetConsoleCP (1251); 
    SetConsoleOutputCP (1251);
    
    char *s[4] = {"upload.txt", "uploadANSI.txt", "uploadUNICOD.txt", "uploadUNICOD BIg.txt"};
    wchar_t *sw[4] = {L"upload.txt", L"uploadANSI.txt", L"uploadUNICOD.txt", L"uploadUNICOD BIg.txt"};
    char buff[500];
    wchar_t wbuff[500];
 
//*.................................................    
    cout << "1" << endl << endl;
    for (int i = 0; i < 4; i++)
    {
        ifstream f(s[i]);
        if (!f.is_open()) cout << "Error!" << endl;
        f.getline(buff, 500);
        cout << s[i] << endl;
        cout << buff << endl;
        f.close();
    }
//......................................................*/
//*....................................................
    cout << "2" << endl << endl;
    for (int i = 0; i < 4; i++)
    {
        wifstream fw(sw[i]);
        if (!fw.is_open()) cout << "Error!" << endl;
        fw.getline(wbuff, 500);
        wcout << sw[i] << L'\n';
        wcout << wbuff << L'\n';
        fw.close();
    }
//.......................................................*/
 
    system("pause");
    return 0;
}
Только ANSI нормально выводится.
Vort_
186 / 186 / 52
Регистрация: 10.07.2012
Сообщений: 400
20.07.2012, 21:28     Русские символы из ASCII #15
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <fstream>
#include <Windows.h>
using namespace std;
 
int main()
{
    char buf1[500] = {0};
    ifstream f("e:\\upload.txt");
    f.getline(buf1, 500);
 
    wchar_t buf2[500] = {0};
 
    MultiByteToWideChar(CP_UTF8, 0, buf1, 500, buf2, 500);
    wcout.imbue(locale("rus_rus.866"));
    wcout << buf2 << endl;
}
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
21.07.2012, 00:13     Русские символы из ASCII #16
Благодарю! Работает. Как сделать, чтобы до этого нормально выводились русские буквы? После, я попробовал, можно сделать, например, setlocale(0, ""); и вывод русских будет нормальный. А, до, как сделать?
И ещё вопрос. Такой код только для Windows?

Добавлено через 2 часа 12 минут
Получается так. Сначала setlocale(0, ".1251"); После MultiByteToWideChar(CP_UTF8, 0, buff, 500, wbuff, 500);, перед wcout << wbuff << endl;, так:wcout.imbue(locale("rus_rus.866")); или так: setlocale(0, "rus_rus.866");. Потом снова setlocale(0, ".1251");
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.07.2012, 16:55     Русские символы из ASCII
Еще ссылки по теме:

Заменить символы в строке (ASCII) - C++
Есть строка с некоторым набором символов: string consoleText = &quot;Здесь должен быть текст&quot;; Возможно ли заменить какой-либо символ на...

Русские символы и substr - C++
#include &lt;iostream&gt; #include &lt;string&gt; using namespace std; int main() { setlocale( LC_ALL,&quot;Russian&quot; ); string sTmp; ...

Не подсчитывает русские символы - C++
Не пойму в чём загвостка; логически вроде всё верно: #include &lt;iostream&gt; #include &lt;fstream&gt; #include &lt;cstdlib&gt; #include &lt;stdexcept&gt;...

Case и русские символы - C++
Здравствуйте, Есть массив char text в котором лежат буквы. При проверке лежит ли в данном месте определённая буква,компилятор...

Не выводятся русские символы - C++
Программа не может вывести русские символы, но если оставить только функцию main то все отображается нормально #include &lt;iostream&gt; ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
ipoder
1 / 1 / 0
Регистрация: 23.06.2012
Сообщений: 18
21.07.2012, 16:55  [ТС]     Русские символы из ASCII #17
Vort_, Спасибо огромное. А то я уже и не надеялся.
Yandex
Объявления
21.07.2012, 16:55     Русские символы из ASCII
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru