Японские символы неправильно отображаются на изображении на странице ASP.NET - PullRequest
1 голос
/ 14 февраля 2012

Я создаю изображение на C #, которое должно содержать текст на японском языке. Затем я помещаю это изображение на всю страницу, которая также на японском языке. Вся страница отображается правильно (кодировка: UTF-8), но изображение отображается неправильно. Вместо правильного текста я получаю неправильные символы (не «?», А что-то похожее на квадрат).

Мне нужно написать этот текст на изображении в Arial. Кто-нибудь знает, что может быть не так? Почему текст не отображается правильно. И еще один вопрос ... когда я тестирую его на своей локальной машине, все выглядит правильно, но когда я развертываю приложение со страницей на внешнем сервере, возникает эта странная ошибка.

Для создания изображения с текстом я использую:

Font f = Font("Arial", 10f, FontStyle.Bold); 
g.DrawString(text, f, b, rect); 

1 Ответ

4 голосов
/ 14 февраля 2012

На внешнем сервере, вероятно, установлена ​​версия Arial, которая не включает набор символов японского языка (насколько я помню, тот, который включает японский язык, называется "Arial Unicode MS").Помните, что когда вы генерируете образ в ASP.NET, используются серверные шрифты.

Обратите внимание, однако, что по закону вам не разрешается устанавливать «Arial Unicode MS», кроме случаев, когдаэто часть Office - или если вы лицензировали его («Arial Unicode») от Monotype / Ascender .Возможно, будет более приемлемым вариантом заменить Arial какой-либо другой гарнитурой, в зависимости от ваших средств (из этого я оставлю свои субъективные мнения по Arial).

При установке нового шрифта на сервере сделайтеуверен, что вы перезапустите IIS..NET не распознает установленные шрифты до перезапуска (этого недостаточно для перезапуска приложения - может быть достаточно для перезапуска пула приложений, но я никогда не пробовал).

Обновление

Если это все еще не работает, скорее всего, запасной вариант шрифта не на месте.То есть вы указываете «Arial», но GDI + (DrawString) не знает, что нужно переключиться на «Arial Unicode MS» для символов, которых нет в Arial (я думаю, Office устанавливает это при установке).

Две возможности:

  • Измените свой код, чтобы фактически использовать шрифт (то есть «Arial Unicode MS»), а не «Arial» (который никогда не имеет японские символы в любомдругие версии).Это имеет тот недостаток, что если вы используете символы, отличные от японских, они могут выглядеть (даже) хуже, чем в стандартной гарнитуре «Arial», поскольку «Arial Unicode MS» не содержит кернинга или других подобных функций.

  • Или проверьте, есть ли связь между Arial и другими шрифтами в вашем (локальном) реестре: HKLM\SOFTWARE\Microsoft\Windows NT\CurrentVersion\FontLink\SystemLink - один из этих шрифтов будет фактически отображать ваши японские символы в качестве запасного шрифта - он можетдаже не быть "Arial Unicode".Вы можете добавить эту же ссылку вручную в реестре на сервере (и, возможно, перезапустить IIS).

Еще один вероятный вариант, который можно использовать в качестве запасного варианта, - «MS Gothic».Насколько я помню, GDI + использует вышеупомянутую систему "FontLink" для восстановления шрифтов, в то время как WPF использует свою собственную систему.Самый простой способ быть уверенным (когда вы используете шрифты, которые вы все равно контролируете) - это напрямую использовать шрифт с японскими глифами.Arial Unicode просто предназначен в качестве последнего средства для Windows, когда глифы не встречаются в других шрифтах - не как то, что выглядит красиво само по себе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...