Кодирование пакетного файла

У Brian Harry есть хорошее сообщение об объяснениях здесь .

Вот выборка:

Что относительно детерминированного завершения и значения вводит (структуры)?

--------------я видел много вопросов о структурах, имеющих деструкторы и т.д. Это стоит комментария. Существует множество проблем для того, почему некоторые языки не имеют их.

(1) состав - Они не дают Вам детерминированное время жизни в общем случае для тех же видов причин состава, описанных выше. Любой недетерминированный класс, содержащий, нельзя было бы назвать деструктор, пока он не был завершен GC так или иначе.

(2) конструкторы копии - одно место, где это действительно было бы хорошо, находится в выделенных местных жителях стека. Они были бы ограничены по объему к методу, и все будут великими. К сожалению, чтобы заставить это действительно работать, также необходимо добавить конструкторов копии и назвать их каждым разом, когда экземпляр копируется. Это - одна из самых ужасных и самых сложных вещей о C++. Вы заканчиваете тем, что получили код, выполняющийся повсеместно, где Вы не ожидаете это. Это вызывает наборы проблем языка. Некоторые разработчики языка приняли решение избегать этого.

Скажем, мы создали структуры с деструкторами, но добавили набор ограничений для создания их поведения разумным перед лицом проблем выше. Ограничения были бы чем-то как:

(1) можно только объявить их как локальные переменные.

(2) можно только пройти мимо них - касательно [1 110]

(3) Вы не можете присвоить им, можно только получить доступ к полям и назвать методы на них.

(4) Вы не можете упаковать их.

(5) проблемы с помощью них посредством Отражения (позднее связывание), потому что это обычно включает упаковку.

, возможно, больше, но это - хорошее начало.

, Каково использование эти вещи было бы? Вы на самом деле создали бы файл или класс соединения с базой данных, который может ТОЛЬКО использоваться в качестве локальной переменной? Я не полагаю, что кто-либо действительно был бы. Что Вы сделали бы, вместо этого, создают соединение общего назначения и затем создают автоматическую разрушенную обертку для использования в качестве ограниченной по объему локальной переменной. Вызывающая сторона затем выбрала бы то, что они хотели использовать. Обратите внимание, что вызывающая сторона приняла решение, и это не полностью инкапсулируется в самом объекте. Учитывая, что Вы могли использовать что-то как предложения, подходящие в нескольких разделах.

замена для RAII в.NET является шаблоном использования, который работает почти также, после того как Вы привыкаете к нему.

53
задан Peter Mortensen 3 January 2017 в 10:41
поделиться

1 ответ

You have to save the batch file with OEM encoding. How to do this varies depending on your text editor. The encoding used in that case varies as well. For Western cultures it's usually CP850.

Batch files and encoding are really two things that don't particularly like each other. You'll notice that Unicode is also impossible to use there, unfortunately (even though environment variables handle it fine).

Alternatively, you can set the console to use another codepage:

chcp 1252

should do the trick. At least it worked for me here.

When you do output redirection, such as with dir, the same rules apply. The console window's codepage is used. You can use the /u switch to cmd.exe to force Unicode output redirection, which causes the resulting files to be in UTF-16.

As for encodings and code pages in cmd.exe in general, also see this question:

EDIT: As for your edit: No, cmd always assumes the batch file to be written in the console default codepage. However, you can easily include a chcp at the start of the batch:

chcp 1252>NUL
ren -hélice hélice

To make this more robust when used directly from the commandline, you may want to memorize the old code page and restore it afterwards:

@echo off
for /f "tokens=2 delims=:." %%x in ('chcp') do set cp=%%x
chcp 1252>nul
ren -hélice hélice
chcp %cp%>nul
67
ответ дан 7 November 2019 в 08:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: