Git портит символы не ascii в контейнере Linux - PullRequest
0 голосов
/ 09 июля 2019

У меня есть проект .Net Core (C #) со следующей строкой в ​​одном из классов:

var input = "£";

Но когда я делаю git-клон в контейнере Docker (microsoft/dotnet:2.2-sdk), он портит его и отображает как bash, используя cat).

И когда я запускаю его, его Utf-8 байтов равны [239, 191, 189] = [EF, BF, BD], которые кажутся так называемыми символом замены Unicode .

Редактором Windows, который я использую, является VS 2017, но символ правильно отображается на других компьютерах с Windows и правильно анализируется командой dotnet run/test, поэтому я не думаю, что это проблема неправильного сохранения символа.

Есть идеи, почему я вижу такой беспорядок и как его решить?

Некоторые подробности

  • Я получаю байты, используя Encoding.UTF8.GetBytes("£");
  • Отлично работает на Windows 10 машине
  • версия Linux Debian GNU/Linux 9 (stretch) из cat /etc/os-release
  • locale -a возвращает C C.UTF-8 POSIX
  • В Windows Notepad ++ при открытии он называется ANSI и отображается правильно.

Бег fgrep 'var input' file.cs | od -tx1 -c

0000100  76  61  72  20  69  6e  70  75  74  20  3d  20  22  a3  22  3b
          v   a   r       i   n   p   u   t       =       " 243   "   ;

1 Ответ

1 голос
/ 10 июля 2019

Ваш файл содержит один байт a3, который соответствует кодировке Windows-1252 для символа £.Ваша система Linux отображает , поскольку она не является допустимой кодировкой UTF-8.

Необходимо настроить Visual Studio для использования UTF-8 вместо Windows-1252.

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