Почему при использовании Safari появляется эмодзи, а не Chrome?

29

Почему смайлики появляются, когда я использую Safari, но не Chrome на том же MacBook под управлением Lion? Оба браузера используют WebKit, и я думаю, что поддержка шрифтов исходит от ОС, а не от приложения.

Для справки это страница, отображаемая в Chrome 17.0.963.56:

Chrome 17.0.963.56

И это страница, отображаемая в Safari 5.1.3 (7534.53.10):

Safari 5.1.3 (7534.53.10)

Daniel
источник
9
Я просматриваю это в Chrome и не вижу в вопросе или названии, но я делать увидеть это в заголовке вкладки наверху окна.
CajunLuke
Я редко когда бываю над вкладками, чтобы увидеть полный заголовок страницы, но вы правы, это действительно так. Это очень удивительно.
Jason Salaz
Возможно, плагины Chrome встроены в собственную палитру символов, что может быть гибридной версией между нативной и проприетарной. И им просто нужно обновить его для OS X. Но я знаю, что emoji - это не просто тип шрифта (вы не можете портировать emoji на SL, например, просто установив соответствующий шрифт). Так что для них есть нечто большее, чем просто чтение нового шрифта. Я бы подал ошибку в Google. Или запросите полную поддержку.
14
Поскольку посетителям с Chrome будет трудно читать заголовок, я голосую, чтобы сменить заголовок на «Как я могу создавать какашки в Google Chrome?»
Gerry
@cksum Я вернул название, потому что оно стало важной информацией в вопросе.
Jason Salaz

Ответы:

27

Разница заключается в механизмах рендеринга для окон браузера.

Мы знаем, что Safari отображает набор символов не так, как Chrome. Но элементы Window UI (вкладки в Chrome) в порядке. Это наша самая большая подсказка.

Элементы пользовательского интерфейса окна (вероятно, я здесь не прав), все они отображаются операционной системой. Таким образом, они получают полный набор расширений эмодзи на уровне ОС.

Но то, что происходит внутри окна веб-браузера, все очень зависит от браузера. Механизмы рендеринга - большая часть секретного соуса каждого браузера.

И Safari, и Chrome используют WebKit, но сходство между экземплярами WebKit, которые они используют, останавливается где-то рядом с именем движка. Это обе вилки из основной версии, и они сильно настроены для повышения производительности таким образом, который, по мнению каждой команды разработчиков браузеров, имеет смысл для их конечных пользователей.

@JasonSalaz обнаружил большую ошибку в базе данных ошибок Chrome, которая дает нам окончательное представление о том, что это связано с форками WebKit: http://code.google.com/p/chromium/issues/detail?id=90177 - эта ошибка говорит о различиях между форком в Chrome и основной линией WebKit из проекта с открытым исходным кодом. Существуют различия в рендеринге в основной строке, которые еще не дошли до версии, которую использует Chrome. И похоже, что они собираются объединить изменения в какой-то момент.

Обновление: Пол Ирландский имеет отличный пост в блоге о том, как WebKit отличается для всех этих браузеров, которые в настоящее время используют его , Если вы действительно хотите понять, насколько разнообразна среда WebKit, это отличная статья.

Ian C.
источник
Argh. Надо было сделать несколько снимков экрана. Ну что ж...
Ian C.
Поддержка Emoji отслеживания ошибок в Chromium: crbug.com/62435 Тот, на который вы ссылаетесь, является дубликатом.
Mathias Bynens
Для справки: он все еще не работает в Chrome 20.0.1132.57.
О, здорово, согласно Комментарию 17 в отчете об ошибке, эта проблема была закрыта. Если кто-то захочет снова пожаловаться, вам необходимо подать новый отчет об ошибке.
gentmatt
1
Теперь он работает с Chrome 41!
yincrash
12

Вы можете использовать расширение Chrome Chromoji , Это обходной путь, который заменит эмодзи встроенными изображениями на веб-страницах.

Steffi
источник
2
Полностью работает, по крайней мере, для Twitter, не удаляйте ответ.
MarcusJ
2

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

Итак, как браузер узнает, какую кодировку символов использовать?

  1. Это может быть указано в HTTP с помощью Content-Type заголовок.
  2. Его можно указать для документа HTML с помощью meta элемент.
  3. Его можно указать для конкретного элемента HTML с помощью charset приписывать.

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

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

Итак, чтобы ответить на ваш вопрос напрямую: Safari и Chrome пытаются по-разному найти правильную кодировку символов.

james.garriss
источник
3
Вид - & gt; Кодировка текста в Safari говорит «по умолчанию». Вид - & gt; Кодирование в Chrome говорит «UTF-8». Приставки Safari говорят, что кодировка по умолчанию - западная (ISO Latin 1). Если я изменю кодировку в Chrome на Western (ISO-8859-1), Western (Windows-1252) или Western (Macintosh), я все равно не укажу правильные эмодзи, но вместо пустого места вижу тарабарщину. Я не думаю, что это так просто, как кодировка символов. Я подозреваю, что есть различия рендеринга. (Продолжение ...)
Ian C.
1
(продолжение сверху) Это будет учитывать строку заголовка, отображающую смайлики (текст, скорее всего, визуализируется механизмом рендеринга OS X, поскольку он является графическим элементом в Window), а тело страницы - собственным механизмом рендеринга Chrome.
Ian C.
1
@IanC. это, вероятно, заслуживает ответа, если вы расширите его просто немного Больше. Chrome использует WebKit, но не является одним из классов ObjC / Cocoa, которые изначально поддерживают эмодзи. Это, в конце концов, отличная черта Chrome № 1, которая всегда достигается только с помощью специального решения. Таким образом, Chrome должен либо явно написать поддержку Emoji, либо прекратить делать то, что заставляет людей предпочитать их по сравнению с Safari и другими браузерами. (Угадай, какой из них более вероятен?)
Jason Salaz
1
Наткнулся на это: code.google.com/p/chromium/issues/detail?id=90177
Jason Salaz
@JasonSalaz хороший улов с этим сообщением об ошибке. Это последний кусок. Записываю ответ!
Ian C.
0

Перейдите в строку меню Chrome, нажмите «Дополнительные инструменты» → «Кодировка» и выберите новый формат кодировки. Я использую "Unicode UTF-8", похоже, у меня работает.

Blake Edmunds
источник
-1

https://code.google.com/p/chromium/issues/detail?id=62435 недавно был отмечен как исправленный; начиная с версии 41 эмодзи должно отображаться нормально в Chrome.

thakis
источник
1
Хотя это и полезно, но на самом деле это не ответ. Это не объясняет Зачем это происходило. Это лучше оставить как комментарий ИМО.
Ian C.
Это произошло потому, что поддержка смайликов не была реализована. Так что вопрос не будет иметь смысла, когда m41 будет стабильным.
thakis
-9

Символ - это персонаж, созданный Apple. Safari использует свой собственный набор символов.

Josh
источник
5
На самом деле «куча пу» - это символ международного стандарта в Unicode - символ 1F4A9, и даже не специфичный для Apple, не говоря уже о чем-то особенном для Safari. Увидеть Википедия на Emoji а также этот PDF для деталей.
bmike
2
Хотя характер не является уникальным для Apple, цвета. До сих пор я не знаю ни одного другого существующего цветного шрифта, и я думаю, что Apple создала свой собственный стандарт для этого (запатентованная таблица sbix). Различные приложения не распознают этот шрифт, но будут отображаться из обычного черно-белого шрифта Symbola.
Tom Gewecke
1
PS Поскольку в этом шрифте действительно есть что-то «уникальное для Apple», я думаю, что этот ответ не так уж и далек, как можно предположить в минус-рейтинге.
Tom Gewecke
@TomGewecke хорошо, «Safari использует свой собственный набор символов» просто ложь. Поэтому я считаю, что минус рейтинги заслужены.
jbg