Как упражнение, я хочу написать XML-парсер (я знаю, что есть много действительно хороших библиотек, но я хочу попробовать сам). Я понимаю, что ByteString.Lazy
, вероятно, лучший вариант для любого xml-файла, достаточно большого, потому что в памяти простые строки - это списки точек unicode. Мой вопрос: должен ли я использовать Data.Text.Lazy.Encoding.decodeUtf8With
в качестве предварительного процессора или просто передавать кодирование прямо в синтаксический анализатор?Определение кодировки ByteString
ответ
Как это сделать in the XML standard itself, хотя это ненормативное приложение (т. Е. Вам разрешено делать это по-другому).
Воспроизведение алгоритма здесь было бы излишним, поэтому я предлагаю только по ссылке выше.
Это сложная проблема .... Кодирование XML-документа указано в самом документе (в инструкции по обработке). Это, очевидно, приводит к проблеме с курицей и яйцом, описанной здесь. What use is the 'encoding' in the XML header?
Итак, если вы хотите сделать все правильно, сначала вам нужно выяснить, как читать первую строку документа (это один байт на символ или 2 байта), затем прочитайте его, затем прочитайте остальную часть текста, используя правильную кодировку. К счастью, первая строка будет символами в диапазоне 32-127, что упростит ситуацию.
Если бы это был я, и я делал это как учебное упражнение, я бы просто ограничил документ до utf8 .... (подробности здесь просто сантехника).
- 1. определение кодировки ответа сервера
- 2. eclipse автоматическое определение кодировки файлов
- 3. Как автоматическое определение строковой кодировки?
- 4. Определение правильной кодировки символов в PHP?
- 5. Определение кодировки символов исходного файла JavaScript
- 6. Как преобразовать Bytestring в источник [Bytestring, Any]
- 7. Google Protobuf ByteString против Byte []
- 8. Haskell Convert ByteString To UTC Time
- 9. Haskell Snap Framework - Тип несоответствия ByteString/Maybe ByteString
- 10. Lazy bytestring insanity
- 11. Pcap bytestring types
- 12. Многие типы String (ByteString)
- 13. Получите `Char` от` ByteString`
- 14. ByteString to Vector conversion
- 15. Ptr Word8 to ByteString
- 16. Побитовые операции с ByteString
- 17. Bytestring не может использоваться
- 18. Haskell ByteString/Data.Binary.Показать вопрос
- 19. chunksOf analog для ByteString?
- 20. Кодировки и кодировки
- 21. ZipArchiveEntry ошибка кодировки кодировки
- 22. php 5.6 - соединение в Oracle с использованием pdo и определение кодировки/кодировки
- 23. Определение ISO-8859-1 против US-ASCII кодировки
- 24. Определение кодировки файла, загруженного в Google App Engine
- 25. Распаковка IO ByteString в ghci
- 26. Scala - Прохождение ByteString до пустого
- 27. Haskell: конвертировать bytestring в [word8]
- 28. Преобразование Redis ByteString в BasicDBObject
- 29. Haskell Bytestring to Float Array
- 30. Bytestring - номер версии версии версии
Мне это известно. Я просто хотел знать, могу ли я получить очень большую эффективность, выполняя ненормативное обнаружение самостоятельно или позволяя библиотеке это делать. –
Ну 'decodeUtf8With' не поможет вам, например, если используется UTF-16. Вы можете использовать алгоритм в стандарте, чтобы решить, что такое вход, и затем использовать одну из функций 'decode ___ With' перед запуском вашего синтаксического анализатора по декодированному« Тексту ». Я думаю, что кодирование, обрабатываемое как отдельный шаг, приведет к более чистому парсеру ядра. – porges
Спасибо. Я предполагаю, что смотреть на первые байты и захватить объявление кодирования в строку [Char] не будет слишком дорогостоящим. Что касается кодировок, отличных от unicode, я просто надеюсь, что Data.Text.ICU не приведет к тому, что использование памяти будет расти экспоненциально. –