У меня проблемы со шведскими национальными символами при использовании 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 Песочница: Нет.
Он работает в моей Windows 11 на Ubuntu 22.04 WSL со встроенным bash, а также при нажатии кнопки «Выполнить». Он также работает на моей родной Windows11 со встроенным powershell и на встроенном «cmd». Это также работает, когда я нажимаю кнопку «запустить» анализатора ржавчины. Это работает даже в git-bash (вложенном в VSCode).
Я испробовал каждую комбинацию ОС/оболочки/метода запуска, которая у меня была, и она работает на всех из них.
Какую оболочку вы используете в VSCode? Команда? PowerShell? Гит Баш? Это происходит на всех или только на одном конкретном?
Изменяет ли что-нибудь переключение между программным и аппаратным рендерингом? (Настройки -> Функции -> Терминал -> Интегрировано: ускорение графического процессора)
Странно, пробелы добавлены в начале строк 2 и 3." - Этого не должно быть. Смотрите: play.rust-lang.org/…
Вы пытались обновить Rust до последней версии? (Не думаю, что это что-то изменит, но попробовать стоит)
Может быть связано: github.com/Microsoft/vscode/issues/19837
В указанной ветке предлагается добавить это в конфигурацию vscode («Настройки» -> «Нажмите верхнюю правую кнопку «Открыть настройки (JSON)»), а затем добавьте эту строку, если вы используете CMD: "terminal.integrated.shellArgs.windows": ["/K", "chcp 65001"],. В качестве альтернативы, если вы используете PowerShell, используйте эту строку: "terminal.integrated.shellArgs.windows": ["-NoExit", "/c", "chcp.com 65001"],. Конечно, перезапустите свой VSCode между ними. Это имеет значение?
@Finomnis: см. технические данные, добавленные к вопросу. Я пробовал обе команды в терминале VSC, но они выдают ошибку "Unexpected token ':' in expression or statement."
Они должны быть не в вашем терминале, а на странице настроек VSCode. В любом случае они устарели. Я добавил новую версию в свой ответ.
Кстати, ваш вывод об ошибке убедительно указывает на то, что вы используете Powershell. CMD сказал бы '"terminal.integrated.shellArgs.windows":' is not recognized as an internal or external command, operable program or batch file..
@Finomnis: это Powershell, теперь я это вижу.
Из любопытства: вы сказали, что это сработает, если вы запустите программу напрямую в оболочке. Это также сработало, если вы выполнили его напрямую в Powershell? Потому что у меня есть подозрение, что причина, по которой это сработало, заключается в том, что вы использовали Powershell в VSCode, но CMD вне VSCode.
@Finomnis: я использовал CMD вне VCS и Powershell внутри VSC. Я не уверен, что произошло бы, если бы я запустил программу в Powershell вне VSC вместо CMD. Настройки VCS теперь изменены, поэтому, надеюсь, Powershell тоже работает.





- Этот ответ специфичен для Windows. -
ИНФОРМАЦИЯ. Этот ответ описывает, как изменить настройки VSCode, чтобы принудительно использовать UTF-8 в вашей консоли. Альтернативой этому ответу может быть принудительное использование UTF-8 для всей системы, как описано здесь: Использование кодировки UTF-8 (CHCP 65001) в командной строке / Windows Powershell (Windows 10)
Кажется, что иногда оболочка Windows не использует правильную кодовую страницу UTF-8.
Вы можете указать VSCode принудительно использовать кодовую страницу в своей оболочке, используя следующие настройки.
Settings (клавиша быстрого доступа: Ctrl+,) "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
Предыдущие, устаревшие настройки:
"terminal.integrated.shellArgs.windows": ["/K", "chcp 65001"],
"terminal.integrated.shellArgs.windows": ["-NoExit", "/c", "chcp.com 65001"],
Какая операционная система? Какая версия? Какая оболочка? Что вы имеете в виду под «запустить в VSCode»? Через интегрированную оболочку? Через нажатие кнопки "запустить" rust-analyzer?