dotnet 修复 Uno 中文乱码
这是一个历史问题,在使用 Uno 展示中文的时候,如果设置 Uno 的底层使用 Skia 系进行渲染,那么将会因为中文字体问题,导致渲染出现乱码。此问题已被我修复,最佳解法是更新到最新版本
在上一篇博客 使用 Uno Islands 在现有 WPF 里面嵌入 Uno 框架 我在 WPF 里面嵌入了 Uno 应用,但是我发现 TextBlock 无法正常输入中文,如果输入了中文,那将会显示乱码,如下图

我的代码如下
<Grid>
<TextBlock Margin="20" FontSize="30">
<Run Text="林德熙" /><Run Text="{Binding}" /><Run Text="!" />
</TextBlock>
<Button Margin="100">Hello from Uno</Button>
</Grid>
可以通过如下方式获取本文的源代码,先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹,在命令行里面输入以下代码,即可获取到本文的代码
git init
git remote add origin https://gitee.com/lindexi/lindexi_gd.git
git pull origin 08c2d7c8da65ffbb1d873a9f4fdb21304a9c2688
以上使用的是 gitee 的源,如果 gitee 不能访问,请替换为 github 的源。请在命令行继续输入以下代码
git remote remove origin
git remote add origin https://github.com/lindexi/lindexi_gd.git
git pull origin 08c2d7c8da65ffbb1d873a9f4fdb21304a9c2688
获取代码之后,进入 TestUnoIslands 文件夹
此问题的核心原因如 WPF 解决 Skia 因为找不到字体而绘制不出中文字符 所描述,这是因为在 SkiaSharp 里面使用平台调用的时候,传入的中文字体名采用的是 C# 默认的 UTF16 编码。然而在 Skia 里面,期望的字符串编码采用的是 UTF8 编码。这就导致了咱给的中文的字体名,将不会被 Skia 底层识别,从而找不到字体
此问题也有伙伴反馈给 Uno 官方,请看 Uno with Wpf Chinese code display messy code · Issue #6973 · unoplatform/uno
而在 SkiaSharp 里面,此问题已经被我修复,感谢 lsj 帮我调查和提供解决方法。此修复代码已经被合入 SkiaSharp 里,跟随 2.88.3 版本发布。也就是说修复此问题,那只需要更新 SkiaSharp 到 2.88.3 或更高版本
而在 Uno 里面,也更新了依赖的 SkiaSharp 到 2.88.3 版本,详细请看 chore: Bump to skiasharp 2.88.3 by jeromelaban · Pull Request #10261 · unoplatform/uno
也就说只需要将 Uno 更新到最新版本即可修复此问题
如果自己的 Uno 不方便更新,也可以根据 Uno 官方文档 单独更新 SkiaSharp 的版本。更新方法如下,编辑 csproj 项目文件,添加 SkiaSharp 和 SkiaSharp.Harfbuzz 的引用最新版本,如下面代码
<PackageReference Include="SkiaSharp" Version="2.88.3" />
<PackagReference Include="SkiaSharp.Harfbuzz" Version="2.88.3" />
这是我编辑后的 csproj 项目文件,可以提供给大家参考
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net6.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<UseWPF>true</UseWPF>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Microsoft.Extensions.Logging" Version="6.0.0" />
<PackageReference Include="Microsoft.Extensions.Logging.Console" Version="6.0.0" />
<PackageReference Include="Uno.WinUI.Skia.Wpf" Version="4.5.14" />
<PackageReference Include="Uno.WinUI.RemoteControl" Version="4.5.14" Condition="'$(Configuration)'=='Debug'" />
<PackageReference Include="Uno.UI.Adapter.Microsoft.Extensions.Logging" Version="4.5.14" />
<PackageReference Include="Uno.WinUI.XamlHost" Version="4.5.14" />
<PackageReference Include="Uno.WinUI.XamlHost.Skia.Wpf" Version="4.5.14" />
<PackageReference Include="SkiaSharp" Version="2.88.3" />
<PackagReference Include="SkiaSharp.Harfbuzz" Version="2.88.3" />
</ItemGroup>
<ItemGroup>
<UpToDateCheckInput Include="..\TestUnoIslands\**\*.xaml" />
</ItemGroup>
<ItemGroup>
<Content Include="Assets\Fonts\uno-fluentui-assets.ttf" />
</ItemGroup>
<Import Project="..\TestUnoIslands\TestUnoIslands.projitems" Label="Shared" />
</Project>
在更新完成 Uno 和 SkiaSharp 之后,还需要给定一个中文字体名,否则也许会因为 Skia 选用的默认字体不支持中文而乱码
<TextBlock Margin="20" FontSize="30" FontFamily="微软雅黑">
<Run Text="林德熙" /><Run Text="{Binding}" /><Run Text="!" />
</TextBlock>
如此即可解决问题
我更改之后,可以看到如下界面,可以看到中文可以显示

可以通过如下方式获取本文的源代码,先创建一个空文件夹,接着使用命令行 cd 命令进入此空文件夹,在命令行里面输入以下代码,即可获取到本文的代码
git init
git remote add origin https://gitee.com/lindexi/lindexi_gd.git
git pull origin 613b6ec4fc7650fba9af341a090b653899d5cb63
以上使用的是 gitee 的源,如果 gitee 不能访问,请替换为 github 的源。请在命令行继续输入以下代码
git remote remove origin
git remote add origin https://github.com/lindexi/lindexi_gd.git
git pull origin 613b6ec4fc7650fba9af341a090b653899d5cb63
获取代码之后,进入 TestUnoIslands 文件夹
dotnet 修复 Uno 中文乱码的更多相关文章
- (转载)dotnet core 中文乱码 codepages
引子 转载自:http://www.jianshu.com/p/1c9c59c5749a 参考:.Net Core 控制台输出中文乱码 上文中我查阅了一些cli的源码, 闲来无事就继续翻代码, 冥冥之 ...
- ajax传输中文乱码解决方法
问题描述: 我是在一个jsp页面有一个保存按钮,点击时会触发saveForm()的js函数,在saveForm()函数里经过校验后,会通过ajax发送数据请求,这样就不用通过提交表单来传输数据了,aj ...
- JMeter学习-039-JMeter 3.0 生成 dashboard HTML 报告图表中文乱码
近期,经常有人问 JMeter 3.0 使用时,生成的 HTML 报告图表中的中文乱码问题.在此,简略的说一下解决的方法. 编码相关信息如下: 1.查看控制 csv.xml 等配置结果文件生成.读取的 ...
- android利用zbar二维码扫描-(解决中文乱码及扫描区域定义)
写在最前(这是对上一篇博文的问题做的更新[android利用zbar二维码扫描]) project下载 zbarLib编译project project下载0积分 bug 在2.3的系统中Hol ...
- xShell终端下中文乱码问题
今天,可能是因为不小心中途打断了xShell更新,结果打开xShell发现里面的中文全成了乱码.于是去网上查了一下原因. 更新xshell(xshell5)以及其他终端中文乱码的原因无非有三种 (1 ...
- centos7 zabbix3.4.6显示中文乱码问题
工具 : winscp (Linux Windows 传输文件工具) 当部署完zabbix然后显示中文会出现如下图 然后此时先去windows的文字目录如 C:\Windows\Fonts 随便托个字 ...
- .NET Core System.Drawing.Common 中文乱码的坑
最近在写一个汉字取点阵的程序,最开始是在win环境下运行的,没发现什么异常,然后今天把程序放在centos 下后发现英文正常,中文完全变成两位的字了,最开始是字体的原因 在把宋体等安装到centos ...
- Servlet学习之Tomcat控制台中文乱码问题
Tomcat控制台中文乱码问题 在更新了IDEA2020.1版本后,可以安装官方的简体中文插件,方便我们日常使用,但是更新后再运行Tomcat时,控制台的输出日志出现中文乱码问题,接下来告诉大家如何修 ...
- java中文乱码解决之道(一)-----认识字符集
沉寂了许久(大概有三个多月了吧),LZ"按捺不住"开始写博了! java编码中的中文问题是一个老生常谈的问题了,每次遇到中文乱码LZ要么是按照以前的经验修改,要么则是baidu.c ...
- MAC下 mysql不能插入中文和中文乱码的问题总结
MAC下 mysql不能插入中文和中文乱码的问题总结 前言 本文中所提到的问题解决方案,都是基于mac环境下的,但其他环境,比如windows应该也适用. 问题描述 本文解决下边两个问题: 往mysq ...
随机推荐
- 初探修模的三维模型OBJ格式轻量化压缩的遇到常见问题与处理方法
初探修模的三维模型OBJ格式轻量化压缩的遇到常见问题与处理方法 在对经过修模的三维模型进行OBJ格式轻量化压缩处理的过程中,可能会遇到一些常见问题.以下是一些常见问题以及相应的处理方法: 1.顶点丢失 ...
- 记录--有关CSS盒模型之内边距、边框、外边距的十九问题
这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助 本篇文章主要探讨盒模型,以及内边距.边框.外边距的面试题与思考,也希望您能把您的思考和遇到的问题以评论的方式补充下,后期,我将会补充到文章 ...
- Linunx安装wkhtmltox
1.下载wkhtmltox安装包 官网:https://wkhtmltopdf.org/downloads.html 根据系统类型选择下载wkhtmltox 环境:centos6 32位.wkhtml ...
- 一键生成项目 SpringBoot+MyBatis代码生成器 支持Oracle MySQL PostgreSQL
下载地址 https://github.com/lxw112190/lxw_Helper 如果觉得github下载慢的,可以加我QQ(819069052)我发给你,或者加QQ交流群:758616458 ...
- Kingbase ES 自定义聚合函数浅析
文章概要: 基于前面的博文<Kingbase ES 自定义聚合函数和一次改写案例>这篇文章,我们只考虑了自定义聚合函数非并行的情况, 因此,本篇文章将着重解析一下使用PLPGSQL编写并行 ...
- copy 导入包含特殊符号的文本
客户提供了一份数据记录需要导入数据库,但是文本中有一个列的内容是反斜杠"\" ,因为""是特殊的转义字符,需要使用两个"\"才能表示,如果直 ...
- #虚树,树形dp#洛谷 3233 [HNOI2014]世界树
题目 分析 考虑建一棵虚树,倍增找到虚树上相邻两个点的中间点统计答案 记录每个虚树点最近的距离以及编号最小的点,主要是细节问题 代码 #include <cstdio> #include ...
- Spring Boot 2.X系列教程:七天从无到有掌握Spring Boot-持续更新
目录 简介 Spring Boot的基本操作 Spring Boot的构建和部署 Spring Boot工具 Spring Boot的测试 Spring Boot中使用JPA Spring Boot和 ...
- 一文弄懂java中的Queue家族
目录 简介 Queue接口 Queue的分类 BlockingQueue Deque TransferQueue 总结 java中Queue家族简介 简介 java中Collection集合有三大家族 ...
- C语言 02 安装
C 语言的编译器有很多,其中最常用的是 GCC,这里以安装 GCC 为例. Windows 这里以 Windows 11 为例 官方下载地址:https://www.mingw-w64.org/ 选择 ...