Как исправить код Visual Studio, искажающий символы в Windows?

У меня проблемы со шведскими национальными символами при использовании Rust в Visual Studio Code в Windows 11. Это можно показать с помощью следующей программы:

fn main() {
let abc = " ååå
ööö
äää";
println!("<---{}--->", abc);
}

Когда программа запускается из командной строки с помощью cargo run, вывод выглядит следующим образом:

<--- ååå
     ööö
     äää--->

Как ни странно, в начале строк 2 и 3 добавляются пробелы. Однако при запуске программы в Visual Studio Code шведские символы искажаются.

<--- ååå
     ├╢├╢├╢
     äää--->

Как я могу это решить? Я работаю с обработкой текста, и это большая проблема.

Обновлено: Поскольку проблема не возникает во многих системах, я добавляю технические данные: Windows 11 Pro, версия 10.0.22621, сборка 22621; Версия кода Visual Studio: 1.73.1 (установка пользователем) Дата: 09.11.2022 Chromium: 102.0.5005.167 Node.js: 16.14.2 Песочница: Нет.

Какая операционная система? Какая версия? Какая оболочка? Что вы имеете в виду под «запустить в VSCode»? Через интегрированную оболочку? Через нажатие кнопки "запустить" rust-analyzer?

Finomnis 03.12.2022 10:01

Он работает в моей Windows 11 на Ubuntu 22.04 WSL со встроенным bash, а также при нажатии кнопки «Выполнить». Он также работает на моей родной Windows11 со встроенным powershell и на встроенном «cmd». Это также работает, когда я нажимаю кнопку «запустить» анализатора ржавчины. Это работает даже в git-bash (вложенном в VSCode).

Finomnis 03.12.2022 10:06

Я испробовал каждую комбинацию ОС/оболочки/метода запуска, которая у меня была, и она работает на всех из них.

Finomnis 03.12.2022 10:07

Какую оболочку вы используете в VSCode? Команда? PowerShell? Гит Баш? Это происходит на всех или только на одном конкретном?

Finomnis 03.12.2022 10:12

Изменяет ли что-нибудь переключение между программным и аппаратным рендерингом? (Настройки -> Функции -> Терминал -> Интегрировано: ускорение графического процессора)

Finomnis 03.12.2022 10:13

Странно, пробелы добавлены в начале строк 2 и 3." - Этого не должно быть. Смотрите: play.rust-lang.org/…

Finomnis 03.12.2022 10:14

Вы пытались обновить Rust до последней версии? (Не думаю, что это что-то изменит, но попробовать стоит)

Finomnis 03.12.2022 10:16

Может быть связано: github.com/Microsoft/vscode/issues/19837

Finomnis 03.12.2022 10:17

В указанной ветке предлагается добавить это в конфигурацию vscode («Настройки» -> «Нажмите верхнюю правую кнопку «Открыть настройки (JSON)»), а затем добавьте эту строку, если вы используете CMD: "terminal.integrated.shellArgs.windows": ["/K", "chcp 65001"],. В качестве альтернативы, если вы используете PowerShell, используйте эту строку: "terminal.integrated.shellArgs.windows": ["-NoExit", "/c", "chcp.com 65001"],. Конечно, перезапустите свой VSCode между ними. Это имеет значение?

Finomnis 03.12.2022 10:20

@Finomnis: см. технические данные, добавленные к вопросу. Я пробовал обе команды в терминале VSC, но они выдают ошибку "Unexpected token ':' in expression or statement."

Kalle Svensson 03.12.2022 10:38

Они должны быть не в вашем терминале, а на странице настроек VSCode. В любом случае они устарели. Я добавил новую версию в свой ответ.

Finomnis 03.12.2022 10:41

Кстати, ваш вывод об ошибке убедительно указывает на то, что вы используете Powershell. CMD сказал бы '"terminal.integrated.shellArgs.windows":' is not recognized as an internal or external command, operable program or batch file..

Finomnis 03.12.2022 10:51

@Finomnis: это Powershell, теперь я это вижу.

Kalle Svensson 03.12.2022 12:48

Из любопытства: вы сказали, что это сработает, если вы запустите программу напрямую в оболочке. Это также сработало, если вы выполнили его напрямую в Powershell? Потому что у меня есть подозрение, что причина, по которой это сработало, заключается в том, что вы использовали Powershell в VSCode, но CMD вне VSCode.

Finomnis 04.12.2022 09:24

@Finomnis: я использовал CMD вне VCS и Powershell внутри VSC. Я не уверен, что произошло бы, если бы я запустил программу в Powershell вне VSC вместо CMD. Настройки VCS теперь изменены, поэтому, надеюсь, Powershell тоже работает.

Kalle Svensson 04.12.2022 11:40
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
2
15
119
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

- Этот ответ специфичен для Windows. -

ИНФОРМАЦИЯ. Этот ответ описывает, как изменить настройки VSCode, чтобы принудительно использовать UTF-8 в вашей консоли. Альтернативой этому ответу может быть принудительное использование UTF-8 для всей системы, как описано здесь: Использование кодировки UTF-8 (CHCP 65001) в командной строке / Windows Powershell (Windows 10)


Кажется, что иногда оболочка Windows не использует правильную кодовую страницу UTF-8.

Вы можете указать VSCode принудительно использовать кодовую страницу в своей оболочке, используя следующие настройки.

  • Откройте страницу Settings (клавиша быстрого доступа: Ctrl+,)
  • Нажмите кнопку в правом верхнем углу, текст которой при наведении курсора читает «Открыть настройки (JSON)».
  • Добавьте следующие строки:
   "terminal.integrated.profiles.windows": {
        "PowerShell": {
            "source": "PowerShell",
            "icon": "terminal-powershell",
            "args": [
                "-NoExit",
                "/c",
                "chcp.com 65001"
            ]
        },
        "Command Prompt": {
            "path": [
                "${env:windir}\\Sysnative\\cmd.exe",
                "${env:windir}\\System32\\cmd.exe"
            ],
            "args": [
                "/K",
                "chcp 65001"
            ],
            "icon": "terminal-cmd"
        },
    },

Это приведет к принудительной кодовой странице UTF-8.

Если это сработало, при открытии новой оболочки должно отображаться Active code page: 65001.

Источник: https://github.com/microsoft/vscode/issues/19837


Предыдущие, устаревшие настройки:

  • Если ваша оболочка "CMD":
    "terminal.integrated.shellArgs.windows": ["/K", "chcp 65001"],
    
  • Если ваша оболочка "Powershell":
    "terminal.integrated.shellArgs.windows": ["-NoExit", "/c", "chcp.com 65001"],
    

Другие вопросы по теме