есть некоторый символ, прежде чем текст 'ан'
Это лже-BOM, результат кодирования U + FEFF BYTE ORDER MARK символ в кодировке UTF-8.
Поскольку UTF-8 является кодировкой, которая не имеет порядка байтов, faux-BOM никогда не должен использоваться, но, к сожалению, довольно много существующего программного обеспечения (особенно в мире MS), тем не менее. Загрузите файл сообщений в текстовый редактор и сохраните его снова как UTF-8, используя кодировку «UTF-8 без спецификации», если она особенно указана.
RU: нР° имÐμньÑий
Вот что вы получаете, когда у вас есть UTF-8 байт строки (представляющий наименьший
) и распечатать его, как если бы это был код Стр. 1252 (Windows Western European). Это не проблема ввода; вы прочитали строку OK и получили строку байта UTF-8. Но тогда, в коде, который вы не цитировали, он выводится как cp1252.
Если вы просто печатаете его на консоли, это следует ожидать, так как консоль всегда использует кодовую страницу по умолчанию для системы (1252 для западной установки Windows), а не UTF-8. Если вам нужно отправить Unicode на консоль, вам придется преобразовать байты в native-Unicode wchar
s и записать их оттуда. Я не знаю, каков конечный пункт назначения для ваших строк, хотя ... если вы просто собираетесь записать их в другой файл или что-то, что вы могли бы просто сохранить в байтах и не заботиться о том, в какой кодировке они находятся.