В чем разница между Linux и Windows.файлы txt (кодировка Unicode )

Я использую только 128 символов, определенных в исходном стандарте ANSI.

но в целом, как файлы implmeneted по-разному.

меня не волнует дисплей, т. е. если вкладка отображается с 6 или 8 символами, но фактическое внутреннее представление в памяти

одно из различий, которое я слышал, - это использование rn (Windows) и n для завершения строки (Linux).

16
задан Hennes
19.12.2022 21:57 Количество просмотров материала 2611
Распечатать страницу

5 ответов

"Unicode" в Windows-UTF-16LE, и каждый символ равен 2 или 4 байтам. Linux использует UTF-8, и каждый символ составляет от 1 до 4 байт.

"абсолютный минимум каждый разработчик программного обеспечения абсолютно, положительно должен знать о Unicode и наборах символов (никаких оправданий!)"

17
отвечен Ignacio Vazquez-Abrams 2022-12-21 05:45

разрывы строк

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 ноль без пробела (Знак порядка байтов)

в Windows файлы UTF-8 часто начинаются с "метки порядка байтов"EF BB BF, чтобы отличить их от файлов ANSI.

в Linux BOM не рекомендуется, потому что он ломает такие вещи, как строки shebang в сценариях оболочки. Кроме того, было бы бессмысленно иметь подпись UTF-8, когда UTF-8 является кодировкой по умолчанию.

9
отвечен user46971 2022-12-21 08:02

одно из различий, которое я слышал, - это использование \r\n (Windows) и \n для разрывов строк (Linux).

да. Большинство текстовых редакторов UNIX будут обрабатывать это автоматически, Редакторы программистов Windows могут обрабатывать это, общие текстовые редакторы (базовый Блокнот) не будут.

Windows, кажется, также нужен EOF (Ctrl-Z) как КОНЕЦ ФАЙЛА в некоторых контекстах, в то время как вы, вероятно, никогда не увидите его на UNIX.

помните, что MacOS X теперь UNIX внизу, поэтому он использует окончания строк UNIX. Хотя до OS X (MacOS 9 и ниже) у нее была своя концовка (\r)

EDIT: в другом формате CR и LF:

  • \n-ASCII 0x0A ,перевод строки (LF)
  • \R-ASCII 0x0D, возврат каретки (CR)
3
отвечен Rich Homolka 2022-12-21 10:19

какая кодировка Unicode используется не на основе ОС.

даже блокнот Windows.exe имеет перечисленные параметры - (я поставлю в скобках, что означает Блокнот) Стандарт ANSI(не Unicode), Юникод(Блокнот означает Юникод ЛЕ), с обратным порядком байтов Юникода(быть), в UTF-8

ANSI не является unicode, он включает в себя очень ограниченное количество символов, поэтому давайте отложим это.

но смотри даже блокнот может сделать LE, или BE, или UTF-8

и блокнот в сторону, UTF-8 может быть с или без ВЕДОМОСТЬ МАТЕРИАЛОВ.

и я использую Windows с Cygwin, хотя порты Windows вполне могут делать \r\n, даже если вы укажете \n, видели, что sed это делает.

существует одно правило, что в кодировке Юникод конкретной ОС. Это была бы не очень гибкая ОС, если бы она была.

чтобы действительно увидеть различия знать программное обеспечение, что кодирование кусок программного обеспечения использует или предлагает.

получить Cygwin и xxd, и / или шестнадцатеричный редактор и посмотреть, что на самом деле внутри файла. Используйте команда 'file' помогает идентифицировать файл. Тогда вы действительно видите, что такое UTF 16bit LE. Что UTF 16bit быть. Что такое UTF-8 (и UTF-8 может быть с или без BOM).

иногда вы можете сказать Блокноту сохранить как unicode(под которым Блокнот означает 16 бит unicode little endian), и он не будет. Но выберите шрифт unicode, такой как arial unicode, и скопируйте некоторые символы unicode из charmap, и это будет.. И хороший способ увидеть, что делает блокнот или любое другое программное обеспечение, - это посмотреть на hex файла

C:\asdf>notepad.exe a.a

C:\asdf>file a.a
a.a; Little-endian UTF-16 Unicode text, with no line terminators

C:\asdf>type a.a
aaa慡ൡ <-- though displayed aaa followed by some boxes in my cmd window
C:\asdf>

C:\asdf>xxd a.a
0000000: fffe 6100 6100 6100 6161 610d            ..a.a.a.aaa.

C:\asdf>

^^ The portion of the byte that stores the 61 is the lower value portion which with LE is stored first.

команда dd (команда *nix, которую я запускаю из cygwin в windows) может переключить ее

C:\asdf>xxd -p a.a
fffe6100610061006161610d

C:\asdf>file a.a
a.a; Little-endian UTF-16 Unicode text, with no line terminators

C:\asdf>dd if=a.a conv=swab of=a.a2
0+1 records in
0+1 records out
12 bytes (12 B) copied, 0 seconds, Infinity B/s

C:\asdf>type a.a2
a  a a aaa
C:\asdf>xxd -p a.a2
feff00610061006161610d61

C:\asdf>file a.a2
a.a2; Big-endian UTF-16 Unicode text, with no line terminators

C:\asdf>

и сам Блокнот может сохранить как UTF-16 Big Endian или UTF-16 Little Endian или UTF-8

enter image description here

Если вы технический человек или даже просто пользователь Блокнота, вы не привязаны к одной кодировке из-за своей ОС!

Я полагаю, что UTF-8 имеет больше смысла, чем UTF-16, UTF-16 будет использовать 16 бит даже для символов для этого нужно всего 8 бит. Кроме того, имейте в виду, что charmap показывает код UTF-16.

Sublime (текстовый редактор windows) сохраняет Юникод как UTF-8 по умолчанию.

Я использую Windows, а иногда и unicode, и я использую UTF-8 в основном.

и поскольку Windows технически гибка, linux, по крайней мере, технически гибок!

1
отвечен barlop 2022-12-21 12:36

Linux использует UTF-8, и каждый символ от 1 до 6 байт, а не от 1 до 4 байт.

U00000000 - U0000007F: 0xxxxxxx
U00000080 - U000007FF: 110xxxxx 10xxxxxx
U00000800 - U0000FFFF: 1110xxxx 10xxxxxx 10xxxxxx
U00010000 - U001FFFFF: 11110xxx 10xxxxxx 10xxxxxx 10xxxxxx
U00200000 - U03FFFFFF: 111110xx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
U04000000 - U7FFFFFFF: 1111110x 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx 10xxxxxx
-1
отвечен it_is_a_literature 2022-12-21 14:53

Постоянная ссылка на данную страницу: [ Скопировать ссылку | Сгенерировать QR-код ]

Ваш ответ

Опубликуйте как Гость или авторизуйтесь

Имя
Вверх