Я не знаю, заканчивается ли строка «\ n» или «\ r» или «\ r \ n» и не то, что текст закодирован Кроме того, если кодировка является utf-8, она не может быть bom. Есть ли функция или lib может это сделать или просто сказать мне о завершении строки.Как определить конец строки с помощью c
ответ
Ты случайно используя fgets
, fread
, fputs
, fwrite
и т.д., на файл, который открыт для чтения текста? Если это так, реализация автоматически преобразует терминаторы линий конкретной ОС (например, "\r\n"
) в '\n'
при чтении и преобразует '\n'
в терминалы линии, специфичные для ОС при записи.
Есть два других сценарии, один из которых выясняется была OP:
- OP борется с
"\r\n"
быть перенесена из другого программного обеспечения операционной системы, и поэтому открытие файлов для чтения в его (предположительно Unix-подобная) ОС больше не будет конвертировать это. Мое предложение состоит в том, чтобы использоватьdos2unix
для этих одноразовых конверсий, вместо того, чтобы раздувать ваш код тем, что, скорее всего, никогда не запустится снова. - Вы не используете одну из этих функций. Это может быть связано с тем, что вы используете поток, такой как сокет, и, возможно, для протокола требуется
"\r\n"
. В этом случае вы должны использоватьstrstr
, чтобы найти точную последовательность"\r\n"
.
UTF-8 был разработан с определенной степенью совместимости с ASCII в виду, следовательно, можно предположить, что любая система, которая использует UTF-8 также будет использовать ASCII или некоторый подобный набор символов. Любые символы, которые используют последовательности размером более одного байта, будут использовать только значения 0x80 или больше для представления. Поскольку '\n'
находится в диапазоне 0x00-0x7F, вам гарантировано, что он будет одним байтом, и он не будет существовать как часть многобайтового символа.
К сожалению, при чтении в текстовом режиме он не будет превращаться в '\ r \ n', не зависящий от ОС, в' \ n'. Поэтому, если вам нужно решить, что кто-то копирует текстовый файл из Windows в Linux, вам нужно другое решение. –
Правда, я должен обрабатывать источник из разных ОС ... – choury
@SteveJessop Хотя я согласен с тем, что это раздражает, когда кто-то смешивает кодировки, существуют утилиты, которые выполняют это преобразование для вас. Зачем изобретать колесо? Если вы потратите пятнадцать минут на каждую окончательную строку, зависящую от конкретной ОС, то вы получите очень сложное решение простой проблемы. – Sebivor
Используйте wcslen, чтобы получить размер в байте строки utf8.
Что это связано с завершением строки? – Sebivor
Но как это мне помогает? – choury
За исключением случаев, когда он использует какое-то отображение памяти в своем источнике, у него, вероятно, будет строка внутри массива char. Он также сказал, что это может быть utf8. Наличие размера в байтах строки utf8 также дает реальный размер строки, start + size = конец строки. –
- 1. Измените конец строки строки с помощью File.WriteAllLines();
- 2. Как определить конец строки в Java?
- 3. Как определить конец строки в Python
- 4. C++ string parsing: как определить конец сообщения?
- 5. как определить конец предложения
- 6. Как определить конец чтения
- 7. Как проверить конец строки с помощью сканера?
- 8. Как выбрать конец строки с помощью regex?
- 9. Определить конец Spotify трека с помощью Applescript?
- 10. C++ ifstream конец строки
- 11. Как определить конец в объективном C
- 12. Как определить конец LongListSelector?
- 13. CSV с \ n \ r в строках - как определить конец строки?
- 14. Как определить конец строки поиска с регулярным выражением
- 15. Как структурировать unpack c нулевой конец строки?
- 16. как сравнивать строки 2, игнорируя конец строки с помощью JQuery
- 17. Конец строки Подсчет слов (C++)
- 18. Как определить конец и начальную точку края с помощью OpenCV?
- 19. Получить конец строки с помощью Javascript
- 20. Как удалить конец строки (имя_файла) с помощью подстроки?
- 21. Конец целочисленной строки в C
- 22. Как проверить конец строки на C++?
- 23. Как я могу пометить конец строки C?
- 24. Лексический анализатор: как определить конец токена
- 25. Как определить конец исходящей мелодии?
- 26. Как определить конец загрузки FileReader?
- 27. Как C знает конец моей строки?
- 28. Как определить конец плейлиста AxWindowsMediaPlayer
- 29. Как определить конец массива программно
- 30. Как определить конец списка va_arg?
См. Этот вопрос: http://stackoverflow.com/questions/1279779/what-is-the-difference-between-r-and-n – SolarBear
Если вы не знаете кодировку, это невозможно сделать с уверенностью. Рассмотрим последовательность байтов '30 0A'. Если вы не знаете кодировку, невозможно определить, является ли это ASCII-представление числа «0», за которым следует строка, или представление UTF16-BE символа «» ». Итак, сначала вам нужна библиотека, чтобы угадывать кодировку символов, тогда вы можете думать о разрывах строк. –
Вы имеете в виду любую кодировку текста, или это всегда ASCII/UTF-8, но с разными терминаторами строк? – teppic