Как приложения (например, vim) узнают, в каком формате (например, ASCII, Unicode и т. Д.) Данный текстовый файл находится перед тем, как его прочитать?
Кроме того, как мы можем написать C ++ программу для обнаружения того же самого?
Как правило, они не знают, прежде чем читать. Иногда они не знают когда-либо после того, как прочитают его — большинство смотрит на начало файла и пытается угадать кодировку данных, которые он содержит.
В некоторых случаях это может быть довольно легко (например, если оно начинается с спецификации Unicode), но в других довольно сложно. Одно время Microsoft «IsTextUnicode» делал неверные предположения относительно большого количества английского текста, поэтому Блокнот (для одной программы, которая его использовала) позволил бы вам напечатать одну вещь в файле, затем, когда вы снова откроете файл, он покажет вы что-то совершенно другое, потому что введенный вами английский интерпретировался как китайские символы, закодированные в Unicode.
Других решений пока нет …