У меня есть документ XHTML1.1 со смешанным текстом на английском и японском языках с индикаторами набора символов lang = "jp" и xml: lang = "jp" в открывающем теге для элемента html. Фактический контент кодируется в UTF-8, и это также указывается в типе контента:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="jp" lang="jp">
<head>
<title>Test page</title>
<meta http-equiv="Content-Type"
content="application/xhtml+xml; charset=utf-8"/>
</head>
<body><div>今</div><div>込</div></body></html>
В спецификациях XML / HTML говорится, что атрибут "lang" наследуется, поэтому содержимое должно отображаться с использованием шрифта, поддерживающего японский, однако вместо этого я вижу, что используются шрифты, предназначенные для китайского, а не японского (Японские «кандзи» на самом деле во многих случаях слегка различаются между двумя языками и сильно различаются для нескольких общих символов).
Например, в приведенном выше коде верхняя часть первого символа должна быть ˄ с - под ним. Если вместо этого используется китайский шрифт, этот символ неизменно будет выглядеть как ˄ с `снизу. Кроме того, второй символ должен иметь форму, которая выглядит как 7 \, но когда используется китайский шрифт, он чаще будет выглядеть как лямбда, λ. Ни одна из них не является правильной печатной / экранной формой на японском языке.
Вопрос: есть ли способ заставить браузеры выбирать японские шрифты для текста CJK без написания правила CSS, содержащего сто одно имя шрифта, в надежде, что хотя бы один из них будет соответствовать тому, что установлен пользователем
(Поскольку минимальные шрифты CJK располагаются в пределах> 4 МБ, а полные - около 15 ~ 20 МБ, полагаться на объявление @ font-face, чтобы гарантировать, что правильный шрифт загружается, явно не может быть и речи).
ответы на комментарии
Yuji: все текущие версии современных браузеров. Если ответ зависит от платформы и браузера, это действительно просто; для того, чтобы он работал везде, ясно, что они мне понадобятся =)
deceze: к сожалению, браузеры не говорят, какой шрифт они использовали, если нет явного правила CSS, которое бы указывало им, какой шрифт выбрать. Обращаясь к вычисленному стилю с использованием getComputedStyle(document.getElementById("elementid")).getPropertyValue("font-family")
, Chrome сообщает, что он использует «Times New Roman», а это не так, потому что в этом шрифте нет глифов CJK. Firefox еще менее полезен, сообщая, что он использует шрифт «засечек», который является не шрифтом, а общей меткой категории ...
2015 г. редактировать
Четыре года спустя этот вопрос по-прежнему получает отклики, поэтому обратите внимание на две вещи:
- XHTML1.1 уже вышел в 2011 году, сейчас это мертвая технология. XML является промежуточным форматом, и если контент должен быть размещен в Интернете, единственный правильный способ сделать это - XSLT-контент в реальном HTML (Конечно, если вы работаете с XML, вы уже знаете, что XML не является формат представления, и у вас уже есть листы XSLT, которые превращают ваши DTD-совместимые данные в обычный текст, HTML, PDF и т. д.)
- Услуги хостинга веб-шрифтов поддерживают поднаборы , так что веб-сайты могут использовать шрифты, которые содержат только контуры и правила композиции для символов, используемых на странице.
2019 edit
Кто-то указал, что атрибут lang
должен быть ja
, а не jp
. Хотя XHTML является полностью мертвой технологией почти десять лет спустя после публикации, это все еще правильная информация.