Я использую только 128 символов, определенных в оригинальном стандарте ANSI.
Но в целом, как файлы создаются по-разному.
Меня не интересует отображение, т.е. если отображается вкладка с 6 или 8 символами, но фактическим внутренним представлением в памяти
Одно из отличий, которое я слышал, это использование \ r \ n (Windows) и \ n для завершения строки (Linux).
Ответы:
«Unicode» в Windows - это UTF-16LE, и каждый символ составляет 2 или 4 байта. Linux использует UTF-8, и каждый символ составляет от 1 до 4 байтов.
«Абсолютный минимум, который должен знать каждый разработчик программного обеспечения, абсолютно точно должен знать о Unicode и наборах символов (никаких оправданий!)»
источник
Разрывы строк
Windows использует CRLF (
\r\n
,0D 0A
) в конце строки, в то время как Unix просто использует LF (\n
,0A
).Кодировка символов
Большинство современных (то есть, начиная с 2004 года) Unix-подобных систем делают UTF-8 кодировкой символов по умолчанию.
Однако в Windows отсутствует встроенная поддержка UTF-8. Он внутренне работает в UTF-16 и предполагает, что
char
строки на основе находятся в устаревшей кодовой странице . К счастью, Блокнот способен читать файлы UTF-8; к сожалению, кодировка "ANSI" по- прежнему используется по умолчанию.Проблемные специальные символы
U + 001A ЗАМЕНА
Windows (редко) использует Ctrl+ Zкак символ конца файла. Например, если вы
type
используете файл в командной строке, он будет урезан до первого1A
байта.В Unix Ctrl+ Zничего особенного.
U + FEFF ZERO без пробела (знак порядка байтов)
В Windows файлы UTF-8 часто начинаются с «метки порядка байтов»,
EF BB BF
чтобы отличать их от файлов ANSI.В Linux BOM не рекомендуется, потому что она разбивает такие вещи, как строки shebang в сценариях оболочки. Кроме того, было бы бессмысленно иметь подпись UTF-8, когда UTF-8 в любом случае является кодировкой по умолчанию.
источник
stty
) в Linux: драйвер консоли переводит его в конец файла. Буквенный символ не появляется во входном потоке; это только заставляет read () возвращать 0.Да. Большинство текстовых редакторов UNIX справятся с этим автоматически, редакторы программистов Windows - с этим, обычные текстовые редакторы (базовый блокнот) - нет.
Похоже, что в некоторых контекстах Windows также требуется EOF (Ctrl-Z) как END OF FILE , тогда как вы, вероятно, никогда не увидите его в UNIX.
Помните, что MacOS X теперь находится под UNIX, поэтому он использует окончания строк UNIX. Хотя до OS X (MacOS 9 и ниже) у него было свое окончание (\ r)
РЕДАКТИРОВАТЬ: в другом формате CR и LF:
источник
read()
возвращает ноль байтов вместо какого-либо конкретного символа.То, что используется кодировка Unicode, не основано на ОС.
Даже в Windows notepad.exe перечислены параметры - (я заключу в скобки, что означает под этим блокнот) ANSI (не Unicode), Unicode (блокнот означает Unicode LE), Unicode Big Endian (BE), UTF-8
ANSI - это не Unicode, он включает в себя очень ограниченное количество символов, поэтому давайте отложим это.
Но посмотрите, даже блокнот может делать LE, или BE, или UTF-8
И блокнот в стороне, UTF-8 может быть с или без спецификации.
И я использую Windows с Cygwin, хотя порты Windows вполне могут делать \ r \ n, даже если вы укажете \ n Видели, что sed это делает.
Не существует единого правила использования кодировки Unicode конкретной ОС. Это была бы не очень гибкая ОС, если бы была.
Чтобы действительно увидеть различия, знайте, что такое Программное обеспечение, что использует или предлагает Кодировка.
Получите Cygwin и xxd, и / или шестнадцатеричный редактор и посмотрите, что действительно находится внутри файла. Используйте команду «file», чтобы помочь идентифицировать файл. Тогда вы действительно видите, что такое UTF 16bit LE. Что такое UTF 16bit BE. Что такое UTF-8 (а UTF-8 может быть с или без спецификации).
Иногда вы можете указать блокноту сохранить как unicode (под блокнотом подразумевается 16-битный юникод с прямым порядком байтов), и это не так. Но выберите шрифт Unicode, такой как Arial Unicode, и скопируйте несколько символов Unicode из charmap, и это будет ... И хороший способ увидеть, что делает блокнот или какое-либо программное обеспечение, это посмотреть на шестнадцатеричный файл.
Команда dd (команда * nix, которую я запускаю из cygwin в Windows) может переключить ее
И сам блокнот можно сохранить как UTF-16 Big Endian или UTF-16 Little Endian или UTF-8
Если вы технический специалист или даже просто пользователь блокнота, вы не обязаны использовать одну кодировку из-за своей ОС!
Я предполагаю, что UTF-8 имеет больше смысла, чем UTF-16, UTF-16 будет использовать 16 битов даже для символов, которым нужно только 8 бит. Также имейте в виду, что charmap показывает код UTF-16.
Sublime (текстовый редактор Windows) сохраняет Unicode как UTF-8 по умолчанию.
Я использую Windows и иногда Unicode, и я в основном использую UTF-8.
А поскольку Windows технически гибкая, Linux, по крайней мере, технически гибок!
источник
file
иtype
внутри приглашения Cygwin?xxd
иtype
команды отсутствуют в стандартной установке Cygwin, я полагаю. Помимо этого я хочу воспроизвести ваши результаты.type
- это стандартная команда, встроенная в cmd.exe.xxd
Скорее всего, она не устанавливается вместе с cygwin по умолчанию, но когда вы устанавливаете cygwin или после нее, если вы запускаете установку cygwin, вы получаете длинный список команд, которые вы можете установить для использования в cygwin. и просто введите xxd в поле поиска настроек cygwin, и оно появится. xxd также доступен после установки vim7, так что вы также можете получить его оттуда.c:\cygwin\bin
(если это подкаталог bin cygwin) в ваш путь. Также любая внутренняя команда cmd, такая как 'type' или 'dir', или любой внешний exe-файл, такой как calc.exe (Windows Calculator), может быть запущен / запущен из Cygwin. Практически все, что можно запустить из cygwin, можно запустить из cmd и наоборот. Если вы хотите использовать bash, используйте cygwin, а если у вас возникли проблемы с одинарными и двойными кавычками, запустите команды cygwin внутри cygwin, а команды cmd - внутри cmd.echo 61|xxd -r -p>a.a
затем попробовать.type a.a
Таким образом, вы можете получить дамп байтов с помощью xxd -p, переставить или изменить байты, затем передать его в xxd -r -p и получить новый файл с другой кодировкой или разные данные на основе старых данных. Команда "file" определяет кодировку на основе байтов.Linux использует UTF-8, и каждый символ составляет от 1 до 6 байтов, а не от 1 до 4 байтов.
источник