Странные символы появляются при использовании веб-браузера WPF и HTML с тегом itali c и текстом arabi c - PullRequest
3 голосов
/ 08 мая 2020

Я не могу понять это, но я сделал простую демонстрацию ниже. Когда эта страница просматривается в IE или Edge, она отображается правильно. Я пробовал разные кодировки, такие как utf-16, Windows -1252, но не работал. Мне кажется, проблема с управлением WebBrowser. Может кто-нибудь разобраться?

ArabicPage. html

<html lang="en" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title></title>
</head>
<body>
    <p><i>اتفاقية</i></p>
    <p>اتفاقية</p>
</body>
</html>

LayoutTest.xaml

<Page x:Class="WpfApp1.LayoutTest"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:local="clr-namespace:WpfApp1"
    mc:Ignorable="d"
    Background="Yellow"
    d:DesignHeight="450" d:DesignWidth="800"
    Loaded="Page_Loaded"
    Title="LayoutTest">
    <WebBrowser x:Name="MyWebBrowser" Margin="20,5,0,5"/>
</Page>

LayoutTest.xaml.cs

using System;
using System.Text;
using System.Windows;
using System.IO;
using System.Windows.Controls;
namespace WpfApp1
{
    public partial class LayoutTest : Page
    {
        public LayoutTest()
        {
            InitializeComponent();
        }

        private void Page_Loaded(object sender, RoutedEventArgs e)
        {
            string dirPath = AppDomain.CurrentDomain.BaseDi‌rectory;
            string fileName = "ArabicPage.html";
            string filename = Path.GetFullPath(Path.Combine(dirPath, fileName));
            string content = File.ReadAllText(fileName, Encoding.UTF8);
            MyWebBrowser.NavigateToString(content);
        }
    }
}

Без тега itali c он отображается правильно:

Arabic without italic tag

Render in Edge browser:

Arabi c визуализировано в Edge

Обновление:

Я тестировал это с помощью веб-просмотра UWP, и он там работает правильно.

1 Ответ

5 голосов
/ 11 мая 2020

Этого можно избежать, используя шрифт, который должным образом поддерживает символы c арабского алфавита, например Tahoma:

<html lang="ar" xmlns="http://www.w3.org/1999/xhtml">
<head>
    <meta charset="utf-8" />
    <title></title>
</head>
<body style = "font-family:Tahoma,serif">
    <p><i style = "font-size:26px;">اتفاقية</i></p>
    <p style = "font-size:26px;">اتفاقية</p>
</body>
</html>

По умолчанию шрифт в windows 10 - это Segoe UI. Похоже, это проблема Windows 10, подробнее подробности от Microsoft здесь .

РЕДАКТИРОВАТЬ:

Ответить на комментарий

Фактически вы можете увидеть на странице windows 10 настроек / шрифтов (фильтр по Arabi c), что шрифт Segoe UI имеет отдельный шрифт itali c face от обычного начертания, напротив Tahoma itali c входит в штатную грань. Хотя, когда я пробовал образец слова Arabi c в этих настройках с Segoe UI в качестве выбранного шрифта, он на удивление правильно отображал символы со всеми доступными стилями шрифта.

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