HarmonyOS鸿蒙Next SansSC_Regular字体部分日文显示异常

HarmonyOS鸿蒙Next SansSC_Regular字体部分日文显示异常 现在是发现
アップデートには3~5分かかります的“り”字

してくだ さ い的“さ”字

コンテンツ な し的“な”字

cke_325.png

cke_4997.png

显示不对,用的1.9版本字体后面更新到2.4版本,请问有没有解决办法呢


更多关于HarmonyOS鸿蒙Next SansSC_Regular字体部分日文显示异常的实战教程也可以访问 https://www.itying.com/category-93-b0.html

10 回复

你这个设置为HarmonyOS_SansSC_Regular字体,各种终端设备的字库可能有差异就会引起不一样。

对于小语种,鸿蒙系统内置部分小语种字体。最好用自定义字体来做,鸿蒙支持 TrueType (.ttf) 和 OpenType (.otf) 格式,可以每个终端字库一样,显示就一样。

自定义字体使用可参考:《开发步骤》

给你个字体库下载地:notofonts ,供参考使用。

更多关于HarmonyOS鸿蒙Next SansSC_Regular字体部分日文显示异常的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


一般使用中英文开发,其他语言不常见。

这个现象大概率不是“渲染坏了”,而是你强制用了 HarmonyOS Sans SC,而它本身是简中文字形取向,所以日文里像 り / さ / な 这类字符会出现“字能显示,但字形不符合日文习惯”的情况。

结论

  • HarmonyOS Sans SCSC 就是 Simplified Chinese
  • 用它去显示日文,部分字形出现异常或“不对味”是正常风险
  • 从你描述看,1.9 升到 2.4 也没根治,说明这不是单纯的版本 bug,更像是字体选型问题
  • 最有效的办法不是继续换 HarmonyOS Sans SC 版本,而是不要用 SC 字体承载日文

华为官方文档也说明了系统字体是有不同字体家族可选的,可以按字体家族切换使用:系统字体的信息获取和使用(ArkTS) 。另外,HarmonyOS 也支持注册和使用自定义字体:自定义字体的注册和使用(ArkTS)

我还查到一个与你这个问题高度一致的同类反馈,结论也是:小语种建议用自定义字体,避免不同终端字库差异导致显示不一致论坛同类问题

为什么会这样

日文里很多字符和中日韩统一码共享 Unicode 编码,但不同地区常用字形并不完全一样。

也就是说:

  • Unicode 码点一样
  • 简中字形和日文字形可能不同
  • 你指定了 HarmonyOS Sans SC
  • 系统就优先按“简中字体”的字形来画

所以就会出现你图里这种:

  • 不是缺字
  • 不是乱码
  • 而是字形风格不对

解决办法

方案 1:不要对日文文本强制使用 HarmonyOS Sans SC

这是最推荐的。

如果这段文本是日文:

  • 不指定 HarmonyOS Sans SC
  • 让系统按 locale / fallback 选择更合适的字体

这样往往比你强压一个简中文字体效果更好。

方案 2:为日文单独切字体

如果你的应用有多语言:

  • 中文用 HarmonyOS Sans SC
  • 日文用日文字体
  • 英文继续用默认或拉丁字体

也就是按语言切 fontFamily,不要一套字体吃所有语言。

方案 3:注册自定义日文字体

如果你要求:

  • 各终端显示一致
  • 不受系统字体版本影响
  • 日文 UI 必须稳定一致

那就直接注册自定义字体,这是最稳的。

比如选一套覆盖日文较完整的字体,注册后在日文场景下用它。

实操建议

如果你现在是 ArkUI / ArkTS

不要把全局都写成单一:

.fontFamily('HarmonyOS Sans SC')

更建议做成按语言切换,或者至少做 fallback 列表。

例如思路上改成:

  • 中文:HarmonyOS Sans SC
  • 日文:自定义日文字体
  • 其他:系统默认

如果你的场景支持字体族列表,也建议把日文字体排在前面,简中字体放后面兜底。

不太建议的方向

1. 继续换 HarmonyOS_SansSC_Regular 版本赌修复

从你现在的现象看,收益不会太大。

2. 指望所有终端系统字库完全一致

同类反馈里也提到,不同终端设备字库可能有差异,所以如果你追求一致性,还是自定义字体更稳。

一句话建议

日文不要继续强制走 HarmonyOS Sans SC 最优先改法是:

  • 中文继续用 HarmonyOS Sans SC
  • 日文切到专用字体,或至少取消 SC 强制指定,让系统 fallback

找HarmonyOS工作还需要会Flutter的哦,有需要Flutter教程的可以学学大地老师的教程,很不错,B站免费学的哦:https://www.bilibili.com/video/BV1S4411E7LY/?p=17

不同终端字体显示效果不同,建议使用自定义字体,可以使终端间字体基本一致

这个感觉看起来是字体显示的问题,看着是差不多。

不过在开发的时候,还是建议指定专有的日文字体

应该是字体显示问题,虽然我不懂日语,但是通过更换APP中使用的字体来调整显示效果是非常常用的解决办法。

cke_132.png cke_313.png

好像是我的问题,后面发现手机和win端显示的还不一样,搞蒙了

HarmonyOS Sans SC_Regular 是简体中文专用字体,未涵盖完整日文字形,因此部分日文字符(如汉字异体、假名等)显示为缺字或默认回退字体样式。

该问题的根源在于 SansSC_Regular 字体主要用于简体中文显示,其字符集不包含特定设计的日文假名字形。当系统在排版日文时,如果字体回退机制未能正确触发,或因引擎兼容性问题未能找到合适的日文字体进行补充,就会导致“り”、“さ”、“な”等字符显示为异常的默认字形(如显示为方块或中文风格字形)。

解决办法有两个方向:

  1. 推荐方案:更换字体。直接弃用 SansSC,改为使用系统默认的 HarmonyOS Sans 字体,或专门针对日文配置 Noto Sans CJK JP(源ノ角ゴシック)等日文字体。在代码中通过 fontFamily 属性指定即可,系统会自动利用字体回退能力显示正确的日文。
  2. 备选方案:强制配置字体栈。如果必须保留 SansSC,可以在代码中显式定义字体回退顺序。例如,在 ArkUI 中通过 fontFamily('SansSC_Regular', 'HarmonyOS Sans') 强制系统在 SansSC 缺字时,按顺序回退到包含完整日文字形的系统字体。
回到顶部