当前位置: 首页 > news >正文

UEFI Spec 学习笔记---33 - Human Interface Infrastructure Overview---33.2.6 Strings

33.2.6 Strings

UEFI 环境中的 string 是使用 UCS-2 格式定义,每个字符由 16bit 数据表示。对于用户界面,strings 也是一种可以安装到 HIIdatabase 的一种数据。

为了本土化,每个 string 通过一个唯一标识符来识别,而每一个标识符可以和多个 package 关联比如英语、法语、中文等。需要显示的时候根据系统的语言配置来选择显示。

实际的每种语言的 package 是独立存储的,所以在添加删除的时候,只需要 including /excluding 对应的 package 就可以了。

每个字符串都可能有与之关联的字体信息,包括字体族名称、字体大小和字体样式。并非所有的平台或显示器都支持系统默认字体(fonts)以外的字体和样式,因此与字符串相关的字体信息应被视为一组提示。

33.2.6.1 Configuration Language Paradigm

该规范使用RFC 4646语言命名方案来标识给定字符串所关联的语言。由于RFC 4646允许相同的主语言标签包含大量不同的子标签(例如区域),因此在RFC 4647中定义了最佳匹配语言算法。需要RFC 4646语言代码来检索Unicode字符串的接口调用者必须使用RFC 4647算法来查找具有最接近匹配RFC 4646语言代码的Unicode字符串。

例如:STR_MODULE_ABSTRACT 就是一个 string identifier 对应语言包就是 en-US

#string STR_MODULE_ABSTRACT             #language en-US "Provides the default logo bitmap picture shown on setup screen."
33.2.6.2 Unicode Usage

本节描述Unicode规范的不同方面如何与该规范中的字符串相关。

33.2.6.2.1 Private Use Area

Unicode定义了一个包含6500个字符的私有使用区域,可以为本地使用而定义。建议的用法包括埃及语、象形文字。

UEFI禁止在UEFI环境中使用此区域。这是因为从各种驱动程序(一个有效的实现)中积累的集中字体数据库最终会在私有使用区域中产生冲突,并且通常会导致错误XML浏览器无法显示这些字符。

33.2.6.2.2 Surrogate Area

Unicode规范有两个16位字符表示:UCS-2和UTF-16。UEFI规范使用UCS-2。主要区别在于UTF-16定义了代理区域,这些区域允许扩展16位Unicode的字符表示。这些字符表示非常类似于双字节字符集(DBCS)——将2048个Unicode值分成两组(D800-DBFF和DC00-DFFF)。

33.2.6.2.3 Non-Spacing Characters

Unicode使用非空格字符的概念。这些符号用于向其他字符添加重音等,方法是在逻辑上将该符号与前一个符号进行“OR”。在Unicode编码中似乎没有任何可预测的范围来确定非空格字符,然而这些字符出现在许多语言中。

33.2.6.2.4 Common Control Codes

该规范允许使用特殊控制字符对字符串中的字体显示信息进行编码。这些控制代码意味着显示提示,不同的平台可能会忽略它们,这取决于显示功能。在单字节编码中,它们的形式是0x7F 0xyy或0x7F 0x0y 0xzz。单字节编码仅在与Unicode的标准压缩方案(见字符串编码)结合使用时使用。在双字节编码中,它们的形式是0xF6yy, 0xF7zz或0xF8zz。当转换为UCS-2时,所有控制码都应该使用0xFxyy形式。

33.2.6.2.5 Line Breaks

一般来说,下列任何一个空格字符都是换行:

本节描述使用控制字符来确定字符串中中断的机会。这些指导方针基于Unicode Technical Report #14,但是大大简化了。

http://www.xdnf.cn/news/537481.html

相关文章:

  • Oracle 中 open_cursors 参数详解:原理、配置与性能测试
  • 一键无损批量压缩图片 保留高清细节 开源免费!支持 10 + 格式转换
  • HashMap 的特点及应用场景
  • GraphQL 接口设计
  • SRS流媒体服务器(6)源码分析之推流篇
  • 2025.05.19【Barplot】柱状图的多样性绘制
  • Linux句柄数过多问题排查
  • stm32如何触摸屏设置显示按钮
  • c#将json字符串转换为对象数组
  • Linux-进程信号
  • Python 与 Java 在 Web 开发中的深度对比:从语言特性到生态选型
  • GPU状态监控
  • MPCount: 人群计数的单域泛化
  • 【成品设计】基于 STM32 的智能鞋柜系统
  • TransmittableThreadLocal实现上下文传递-笔记
  • 「HHT(希尔伯特黄变换)——ECG信号处理-第十三课」2025年5月19日
  • 院校机试刷题第七天:1828西交-矩阵相加、1822计算圆周率、1823学生成绩排序
  • 基于PetaLinux的Zynq PS应用自启动全攻略
  • 开发指南116-font-size: 0的使用
  • 深入解析 Oracle session_cached_cursors 参数及性能对比实验
  • python动漫论坛管理系统
  • ubuntu open shh9.9安装
  • W3电力线载波通信技术
  • 物流项目第一期(登录业务)
  • 40亿非负整数中找到出现两次的数和所有数的中位数
  • 技术决策缺乏团队参与,如何增强执行力?
  • 修改样式还能影响功能?是的!
  • 掌握Python编程:从C++/C#/Java开发者到AI与医学影像开发专家
  • C#编写软件添加菜单栏
  • 2 sys库