2012-06-13 2 views
0

в затмении, у меня есть файл, где какое-то место это написано:понимание кодировки файлов

onclick='obj1.help_open_new_window(fn1(), "/redir/url_name")' 

и в затмении Edit меню-> набор кодирования, я вижу это:

enter image description here

Теперь я меняю кодировку на UTF-8 с использованием того же диалогового окна, и текст изменяется на:

onclick='obj1.help_open_new_window(fn1(),�"/redir/url_name")' 

Все, что я знаю, если этого не происходит, тогда мой сайт будет работать нормально. Почему это происходит и что я делаю, чтобы предотвратить это?

У меня есть некоторые сведения о кодировках: Â and nbsp mystery explainedThe Absolute Minimum Every Software Developer Absolutely, Positively Must Know About Unicode and Character Sets (No Excuses!), но все же я не понимаю, почему это происходит. Не стесняйтесь перейти на уровень байтов (как файл сохраняется), чтобы объяснить это.

UPDATE: Вот что я понимаю: если файл закодирован в latin-1, то каждый символ является байт и поэтому является . это должно быть hex(32). теперь, когда я конвертирую его в utf-8, он по-прежнему остается hex(32), и это определенно . это приводит меня к мысли, что в латинском-1 не hex(32), а комбинация из двух байтов. Как это возможно?

+1

Если вы можете, откройте файл с помощью шестнадцатеричного редактора, чтобы узнать, какие байты фактически хранятся в файле в этой точке. – AKX

ответ

0

Характер, который у вас есть между запятой и цитатой, выглядит не обычным пространством, кроме какого-то другого символа пробела, вероятно, знаменитого U+00A0 NO-BREAK SPACE. Поскольку файл закодирован в latin1, символ сохраняется на диске как байт \xA0, который не образует действительного символа в UTF-8. Это означает, что если вы перезагрузите файл в своем редакторе, используя UTF-8, вы увидите вместо него универсальный символ замены . (Собственная кодировка UTF-8 без пробела будет \xC2\xA0.)

Чтобы избавиться от проблемы, замените пространство без разрыва на нормальное пространство (U + 0020). Нет причин, по которым вы должны использовать свободное пространство в этом контексте, то есть в тексте программы.

+0

Хорошо, но зачем затмевать вставлять 'U + 00A0' вместо' U + 0020' при нажатии пробела? – prongs

+0

Возможно, кто-то скопировал и вставил этот код с веб-страницы, в которой использовалось свободное место. Или, может быть, кто-то случайно набрал место без пробелов: у некоторых людей есть конфигурация, которая вставляет пространство без разрыва, например, когда они набирают Shift + Space. Это часто приводит к ненужным пробелам в файлах, которые они редактируют. – Joni

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