2016-09-28 13 views
1

Как читать файлы ASCII со смешанными окончаниями строк (Windows и Unix) и UTF-16 Big Endian в SAP?Может ли SAP определить кодировку и окончания строк?

Фон: наше приложение ABAP должно прочитать некоторые из наших конфигурационных файлов. Большинство из них - файлы ASCII (обычные текстовые файлы), а один - Unicode Big Endian. До сих пор файлы читались с использованием режима ASCII, и во время нашего тестирования все было в порядке.

Однако у клиентов произошло следующее: файлы конфигурации расположены на терминале Linux, поэтому у него есть Unix Line Endings. Люди читают файлы конфигурации по FTP или аналогично и переносят их на компьютер Windows. На компьютере с Windows они адаптируют некоторые параметры. В зависимости от редактора наши клиенты теперь имеют смешанные концы строк.

Эти смешанные линии заканчиваются при чтении файла в режиме ASCII в ABAP. Файл считывается до того момента, когда окончание строки изменяется, плюс немного больше, но не весь файл.

Я предложил прочитать файл в режиме BINARY, удалить все CR, а затем заменить все остальные LF на CR LF. Это отлично работает - за исключением файла UTF-16 BE, для которого этот подход приводит к беспорядку. Таким образом, все было возвращено.

Я не разработчик ABAP, я просто должен проверить это. С моим опытом в других языках программирования я должен предположить, что есть решение, и я склонен отклонять разрешение «CAN NOT FIX» этой ошибки.

+1

У вас уже есть основное решение для файлов UTF-16 BE. Не могли бы вы прочитать файл в двоичном формате, проверить спецификацию UTF в начале файла? После того, как вы знаете кодировку, вы можете обрабатывать файл соответствующим образом. –

+0

IMHO это не стоит полного ответа, но - это определенно возможно для разработчика ABAP. Тем не менее, я не знаю ни одного существующего и многократно используемого класса автоматического обнаружения-чего-то-на-моем-пути, в том числе и EBCDIC, поэтому он снова сворачивается ... – vwegert

+2

Это не проблема ABAP , Это даже не проблема программирования. Просто убедитесь, что ваши FTP-серверы настроены на автоматическое изменение окончаний при передаче файлов в режиме ASCII. Во всяком случае, именно поэтому был разработан режим ASCII в FTP. На хорошо настроенном FTP-сервере в Windows, например, передача текстовых файлов с клиента Unix в режиме ASCII должна автоматически менять LF на CRLF и наоборот. – Jagger

ответ

1

вы можете использовать CL_ABAP_FILE_UTILITIES=>CHECK_FOR_BOM, чтобы определить, в какой кодировке находится файл, а затем использовать константы класса CL_ABAP_CHAR_UTILITIES для дальнейшей обработки.

 Смежные вопросы

  • Нет связанных вопросов^_^