Перейти к содержимому
Наше приложение «Дешевые авиабилеты» в AppGallery >>

VBA Excel. Смена кодировки UTF-8 на UTF-16

    Смена кодировки текста с UTF-8 на UTF-16 для корректного отображения кириллицы при вставке текста в ячейки Excel.

    Описание проблемы

    Microsoft Excel до сих пор не дружит с кодировкой UTF-8 и отображает символы в этой кодировке в виде «кракозябр». Перекодировка строки с UTF-8 на UTF-16 может понадобиться в VBA, например, при загрузке данных из CSV-файла с кодировкой UTF-8 на рабочий лист Excel.

    Excel использует внутреннее представление строк, которое основано на Unicode. Начиная с Excel 2000, это представление — UTF-16LE (Little Endian). Когда мы помещаем строку в ячейку, Excel преобразует ее во внутренний формат (UTF-16LE) для хранения и отображения.

    Есть такой текст в CSV-файле:

    CSV-файл с текстом открыт в текстовом редакторе

    Если строка на кириллице существует в кодировке UTF-8, Excel может попытаться интерпретировать UTF-8 как ANSI (Windows-1252 или Windows-1251 для кириллицы), что приводит к «кракозябрам».

    CSV-файл с кодировкой UTF-8 открыт в Excel

    Функции для смены кодировки

    Для изменение кодировки текста с UTF-8 на UTF-16 понадобятся 2 функции: функция WinApi, использующаяся для смены MultiByte-кодировок в UTF-16 и пользовательская функция FromUTF8, которая преобразует именно UTF-8 в UTF-16.

    Преобразование кодировки UTF-8 в UTF-16

    Изменение кодировки с UTF-8 на UTF-16 на примере текста из CSV-файла:

    Результат работы кода:

    CSV-файл с кодировкой UTF-16 открыт в Excel


    Содержание рубрики VBA Excel по тематическим разделам со ссылками на все статьи.