2009-09-03 4 views
4

В моем приложении отображаются текстовые символы на английском, японском и китайском языках в текстовом поле и LinkLabel. В настоящее время я проверяю, есть ли символы Юникода и смените шрифт на MS Mincho или оставите его в Tahoma.Отображение текста в формате Юникод в C#

Теперь MS Mincho отображает японский язык правильно, но для китайцев я должен использовать Sim Sun. Как я могу различать эти два?

Как я могу гарантировать правильность отображения текста в Unicode независимо от шрифта/языка?

+0

просто использовал @ shahkalpesh для моего проекта BingDownloader ... http://bing.codeplex.com/ – Mugunth

ответ

4

Если у вас есть символы Юникода для каждого текста, шрифт, поддерживающий Юникод, должен правильно его покрывать (например, Arial Unicode MS).

+1

Это идеальный вариант. Я настраивал, как сказал @dtb. Но этот шрифт ArialUnicode не только хорош, но и служит цели ...: D – Mugunth

+1

Следует отметить, что Arial Unicode MS должна быть лицензирована, прежде чем вы сможете ее перераспределить. – epotter

+0

@epotter: не MS Arial Unicode MS по умолчанию используется .NET/Win7/WinXP для конечных пользователей? –

2

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

+2

@MusiGenesis: Я думаю, вопрос в следующем: как вы определяете язык, чтобы вы могли выбрать правильный шрифт, учитывая, что строка содержит только символы одного языка? – dtb

2

Все строки в C# являются Unicode. Английские (латинские), японские и китайские кодовые точки расположены только в разных диапазонах кодовых точек.

Я думаю, что у вас есть два варианта:

  • Найти шрифт Unicode, который содержит символы для всех кодовых точек во всех трех языках.

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

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

Пример Hiragana: ответ

bool IsHiragana(char ch) 
{ 
    return (ch >= '\u3040') && (ch <= '\u309f'); 
} 

bool IsHiragana(string s) 
{ 
    return s.Count(IsHiragana) > 0; 
} 
+0

@dtb: Я не думаю, что OP хочет различать японский и китайский и т. Д. (По крайней мере, это не то, что сказано). OP говорит: «Как я могу гарантировать правильность отображения текста в Юникоде независимо от шрифта/языка?» – shahkalpesh

+0

@shahkalpesh: Верно, но на это нет идеального ответа. Не все шрифты содержат символы для всех кодов Unicode, поэтому невозможно отобразить произвольные строки Unicode независимо от шрифта. – dtb

+0

@dtb: Вы правы.Если я прав, Arial Unicode MS имеет охват для сценариев OP хочет. – shahkalpesh

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