Отображение арабских символов в консольном приложении C #
15018 просмотра
2 ответа
Я считаю, что было возможно показать арабские символы в консольном приложении 13+ лет назад, со времен Windows ME.
Теперь я использую Visual Studio 2013, на Windows 8, и следующий код показывает:
????? ??
Console.OutputEncoding = System.Text.Encoding.Unicode;
Console.WriteLine("مرحبا بك");
Есть ли вообще вывод арабских символов в вывод консоли?
Автор: Alaa Источник Размещён: 12.11.2019 09:25Ответы (2)
19 плюса
Есть несколько проблем, которые нужно решить, чтобы заставить это работать.
- Вам нужен шрифт, который поддерживает как арабский, так и консоль Windows.
См. KB: необходимые критерии для доступности шрифтов в командном окне.
The font must be a fixed-pitch font. The font cannot be an italic font. The font cannot have a negative A or C space. If it is a TrueType font, it must be FF_MODERN. If it is not a TrueType font, it must be OEM_CHARSET.
- Вы должны установить шрифт.
Для тестирования я использовал DejaVu Mono , один из немногих, который поддерживает арабский язык. Арабский язык является жестким языком для создания шрифта с монотипом, так как эстетика языка плохо работает с фиксированной шириной для каждого символа. Тем не менее, этот шрифт делает честное усилие. Для других возможных альтернатив см .:
полный, моноширинный шрифт Unicode?
Шрифт должен быть установлен обычным способом для вашей версии Windows (в Vista / right-click, Install
7/8 это в файле .ttf). Как только это будет сделано, вы должны следовать указаниям в КБ.
- Редактор реестра -> HKLM \ Software \ Microsoft \ WindowsNT \ CurrentVersion \ Console \ TrueTypeFont
- Добавьте новое строковое значение с именем "
000
" со значениемDejaVu Sans Mono
- перезагрузка
После перезагрузки вы можете изменить шрифт в консоли, выбрав «Свойства» в меню консоли и изменив шрифт на вкладке «Шрифт».
Результат.
... так что после всего этого мы обнаруживаем, что консоль не поддерживает языки справа налево. Я думаю, вы могли бы использовать функцию, такую как:
static string Reverse(string text)
{
if (text == null) return null;
char[] array = text.ToCharArray();
Array.Reverse(array);
return new String(array);
}
а затем сделать
Console.OutputEncoding = System.Text.Encoding.Unicode;
Console.WriteLine(Reverse("مرحبا بك"));
0 плюса
Поскольку ответ здесь не решает вашу проблему. Я публикую альтернативный обход, который может помочь при тестировании.
Если вы можете использовать проект WPF вместо консольного приложения, вы сможете:
- Просмотр арабского текста на экране.
- Прокрутите весь вывод вашего исполнения
- Легко скопировать вывод
- Продолжайте использовать C # в качестве языка кодирования
Создайте проект WPF и добавьте текстовое поле multitiligne в свой дизайн WPF со следующими свойствами:
<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525">
<Grid>
<TextBox HorizontalAlignment="Stretch" AcceptsReturn="True"
TextAlignment="Right"
VerticalScrollBarVisibility="Auto"
Name="textBox1" VerticalAlignment="Stretch"/>
</Grid>
TextAlignment вправо, как на арабском, VerticalScrollBarVisibility для просмотра всех выходных данных и AcceptsReturn для создания многострочного текстового поля. Установки HorizontalAlignment и VerticalAlignment растягиваются, чтобы заполнить все отображаемое окно.
Вы можете добавить метод в разделе кода, чтобы облегчить добавление String в этом textBox, метод может быть таким:
private void writeToTextBox(string textToWrite)
{
textBox1.Text += textToWrite + "\n";
}
Глобальная кодировка будет:
namespace WpfApplication1
{
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
createSourateFromXML();
}
private void createSourateFromXML()
{
string xmlquranfile = @"C:\Users\hp\Downloads\quran-simple.xml";
XmlDocument xml_quran = new XmlDocument();
xml_quran.Load(xmlquranfile);
foreach (XmlNode soura in xml_quran.DocumentElement.ChildNodes)
{
writeToTextBox(soura.Attributes["name"].Value);
}
}
private void writeToTextBox(string textToWrite)
{
textBox1.Text += textToWrite + "\n";
}
}
Foreach перебирает имена в моем XML-файле и добавляет их в текстовое поле WPF. Это скриншот с результатом выполнения /files/images/464184.png
Вы можете настроить отображение, изменив свойства textBox, такие как шрифт, стиль, размер - все они настраиваются.
Автор: ploox Размещён: 09.01.2015 10:10Вопросы из категории :
- c# Преобразовать десятичную в двойную?
- c# Как рассчитать чей-то возраст в C #?
- c# Как вы сортируете словарь по значению?
- c# В чем разница между int и Integer в Java и C #?
- c# Как создать новый экземпляр объекта из Типа
- unicode Regex и unicode
- unicode Как определить, имеет ли конкретная строка символы Юникода (особенно двойные байтовые символы)
- unicode Java, API веб-службы Alfresco и Unicode NamedValues
- unicode How to use Special Chars in Java/Eclipse
- unicode Как заменить ударные латинские буквы в Ruby?
- console-application Когда следует использовать Environment.Exit для завершения консольного приложения?
- console-application Как отобразить элементы списка в окне консоли в C #
- console-application Доступ к SQL Server из консольного приложения
- console-application Как я могу получить путь к приложению в консольном приложении .NET?
- console-application Java gotoxy (x, y) для консольных приложений
- arabic Как я могу преобразовать английские цифры в арабские цифры?
- arabic Какую кодировку символов следует использовать для веб-страницы, содержащей в основном арабский текст? Все в порядке с utf-8?
- arabic Как определить регулярное выражение libpcre для арабских символов?
- arabic Сохранить данные на арабском языке в базе данных MySQL
- arabic Вставка HTML-тега в середине арабского слова разрывает соединение слов (курсив)