Как открыть файл .cpp в Visual Studio и правильно отобразить строковые литералы с кириллическими символами? - PullRequest
0 голосов
/ 11 января 2019

Я пытаюсь открыть исходный файл с кодом C ++ от другого человека. При написании кода он использовал более старую версию Visual Studio, чем сейчас. Буквы кириллицы искажены.

Тупо запутанная часть проблемы кодирования. Когда я открываю файл .cpp с помощью любой программы, которая может читать текст, кроме notepad ++, английские символы отображаются отлично, но кириллица искажается. Notepad ++ показывает, что он открывает этот файл в кодировке ANSI. Если я копирую этот правильно отображаемый текст из notepad ++ в другую программу (Visual Studio, стандартный блокнот Windows, Google переводчик в браузере, какой-то онлайн-конвертер кодировки), он снова искажается, как если бы он копировал байты вместо символов (это поражает меня больше всего) из всех). Поскольку файл .cpp - это просто текстовый файл, я не понимаю, почему я не могу его прочитать. И если бы это был поврежденный файл - notepad ++ не прочитал бы его. Или, по крайней мере, вы увидите сообщение об ошибке, не так ли?

Вот как визуальная студия отображает это:

cout << "����� ����� � ������� 100-999";
cout << "\n�������� 2 (��i� ����� �� � �� ������� �����) = " << d;
cout << "\n�������� 3 (��i� ����� �� �� �� ��������� ����) = " << f << "\n";

Вот правильный код:

cout << "серед чисел в діапазоні 100-999";
cout << "\nзавдання 2 (усіх чисел де є дві однакові цифри) = " << d;
cout << "\nзавдання 3 (усіх чисел де не має однакових цифр) = " << f << "\n";

P.S. Я знаю, что вопросы о кодировании задавались уже миллиард раз, но я не нашел правильного ответа, поэтому, пожалуйста, не бейте меня слишком сильно, если на него ответили раньше. Заранее спасибо.

Ответы [ 2 ]

0 голосов
/ 17 января 2019

Сохраните файл в кодировке Unicode, желательно UTF8. Перейдите в меню «Файл» и нажмите «Сохранить как»

enter image description here

Когда вы нажимаете «Сохранить с кодировкой ...», Visual Studio должна предоставить как минимум две опции UTF8:

"UTF8 с подписью"
"UTF8 без подписи"

Продукты Microsoft предпочитают UTF8 с подписью (BOM), тогда как Notepad ++ предпочитает UTF8 без подписи.

0 голосов
/ 12 января 2019

Я могу предложить рабочее решение вашей проблемы, которое отлично работает в моей Visual Studio 2017 и ConEmu с выводом кодировки UTF-8.

Прежде всего используйте буквенные строки u8 , что дает вам вывод UTF-8:

#include <iostream>

int main()
{
    double d = 0.0;
    double f = 1.0;
    std::cout << u8"серед чисел в діапазоні 100-999";
    std::cout << u8"\nзавдання 2 (усіх чисел де є дві однакові цифри) = " << d;
    std::cout << u8"\nзавдання 3 (усіх чисел де не має однакових цифр) = " << f << "\n";
    return 0;
}

Затем скомпилируйте и запустите вашу программу под Консольным эмулятором ConEmu , который поддерживает вывод UTF-8. В соответствии с документацией поддержки ConEmu Unicode вам необходимо переключиться на UTF-8 с помощью команды chcp 65001:

chcp 65001
test.exe

Это дает мне следующий результат:

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...