5

Мои исходные файлы csv кодируются с помощью UTF8-BOM, поэтому Excel может распознавать символы Unicode (если он только что закодирован с помощью UTF8, Excel не распознает символы Unicode).

Моя проблема заключается в том, что при использовании CSV-файла в кодировке UTF8 при нажатии кнопки «Сохранить» в Excel появляется всплывающая опция для сохранения исходного форматирования. Однако, если файл имеет кодировку UTF8-BOM, нажатие кнопки сохранения происходит мгновенно, и нет возможности сохранить форматирование. Файл CSV затем заменяет запятые на вкладки.

1 ответ1

11

Что происходит, это следующее.

  1. Excel смотрит на ваши системы Региональные настройки, чтобы найти, какой разделитель списка настроен, в вашем случае запятая. Здесь важно отметить, что CSV - это не один четко определенный формат. Можно использовать любой разделитель ...(Изменить: Ну, на самом деле, есть руководство, которое разделяет разделитель до запятой, но это не обязательный стандарт, и руководство не строго соблюдается на практике.)
  2. Затем Excel преобразует данные в памяти в файл XLSX. Вы делаете свои превосходные вещи. Имейте в виду, что это, по сути, преобразование типов файлов, и Excel не помнит, в какой кодировке находился ваш исходный файл или какой разделитель использовался.
  3. Вы делаете клетки и нажимаете Сохранить. В этот момент в Excel больше нет файла CSV, но есть файл XLSX, и ему необходимо преобразовать его обратно во что-то "похожее на CSV". Поскольку он знает, что кодировка должна быть UTF-8 с спецификацией, он решает сохранить как "текст Unicode" (он делает это без явного упоминания об этом). В этом формате они используют UCS-2 LE с BOM в качестве кодировки и табуляцией в качестве разделителя. Это не тот стандарт CSV, который вы имели в виду, или стандарт, в котором ваш исходный файл был отформатирован. Странно и нелогично, но, строго говоря, не так.

Так что ты можешь сделать?
Теоретически вы должны иметь возможность использовать параметр "Сохранить как CSV", а через меню "Сервис" -> "Параметры сети" (в диалоговом окне "Сохранить как") установить кодировку UTF8. Единственная проблема здесь в том, что это, кажется, не работает должным образом. Я предполагаю, что это сломанная особенность. Подробнее о переполнении стека: Excel в CSV с кодировкой UTF8

Итак, что вы действительно можете сделать?
Просто используйте UTF-8 BOM, сохраните и откройте получившийся CSV-файл, чтобы заменить все вкладки запятыми.

И что ты действительно должен делать?
Не используйте Excel для загрузки и редактирования файлов CSV. Или, по крайней мере, быть осторожнее ...
Почему бы и нет?
Я написал (слишком долго) статью об этом здесь.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .