Unicode控制字符

2023-05-16

Unicode控制字符

一、前言

在所有主要的Web浏览器中内存中的字符顺序(逻辑)与它们显示的顺序(可视)是不同的。Unicode 定义了它其中每个字符的方向属性,浏览器应用的一组规则(通过这个来进行自动判断文本Unicode方向属性应该使用哪种方向)在显示时产生正确的顺序由Unicode双向算法进行描述,也可简称为BIDI算法。控制字符,有时候也称非打印字符,是出现在特定的信息文本中,表示某一控制功能的字符。这类字符并不显示,只包含某种特定的功能。

二、Unicode方向属性

Unicode方向属性包含以下三种类型:

  • 强字符:大部分的字符都属于强字符,比如英文字母、汉字和阿拉伯字母。它们的方向性是确定的(英文字母是从左到右,而阿拉伯字母则从右到左),和其上下文的bidi属性无关。并且,强字符在bidi算法中可能会影响其前后字符的方向性;
  • 弱字符:数字和数字相关的符号属于弱字符。它们的方向性是确定的,但对其前后字符的方向性不会产生影响;
  • 中性字符:大部分的标点符号和空格属于中性字符。它们的方向性是不确定的,由上下文的bidi属性来决定其方向。
方向性相关字符效果
Left-to-Right (LTR)强字符从左至右(英文字母、汉字以及世界上大部分从左到右书写的文字)方向性确定,LTR,和上下文无关。并且可能会影响其前后字符的方向性。
Right-to-Left (RTL)强字符从右至左(阿拉伯文字、波斯语以及大部分从右到左书写的文字)方向性确定,RTL,和上下文无关。并且可能会影响其前后字符的方向性。
Left-to-Right (LTR) / Right-to-Left (RTL)弱字符(数字和数字相关的符号)和强字符一样方向性也是确定的,但是不会影响前后字符的方向性。
Neutral中性字符(大部分标点符号和空格)方向性不确定,由上下文环境决定其方向。

2.1 全局方向

也可以成为基础方向。全局方向是一个区域中的总体方向。中英文环境一般是 (LTR) 从左至右,而阿拉伯文环境则为 (RTL) 右至左的书写顺序。我们可以通过dir属性或者direction样式,设置指定方向。

2.2 方向串

方向串是指在一段文字中具有相同方向性的连续字符,并且其前后没有相同方向性的其它方向串。如以下例子:

<p>phone:(415)555-3695</p>
<p>هاتف:(415)555-3695</p>
<p dir="ltr">هاتف:(415)555-3695</p>
<p dir="rtl">هاتف:(415)555-3695</p>

在这里插入图片描述
我们可以看到,含有阿拉伯文字的段落,电话号码好像按符号分割分组反方向显示了。但实际上并非故意这样输入的,而是电话号码输入完成后再在电话号码前加上阿拉伯文字之后就变成这样了。

文中首个强类型字符是阿拉伯文字,因此其所在的文本区域的全局方向为RTL,但弱类型的数字则保持了原方向LTR,而中性字符"😦)-"没有被强字符包围则跟随了全局方向。
方向串
对于以上含有阿拉伯文字的段落,我们可以得到6个不同的方向串。正是因为中性符号被全局方向影响,使得原本的号码被拆分成不同的方向串,从而重新排列。

三、Unicode控制字符

为了解决上面的问题你,Unicode标准中定义了一系列方向性控制字符,这些字符在页面上并不显示,也不占用展示空间。他们像是一些标记,影响着BIDI算法对文字书写方向的判断。下面介绍一些常用的控制字符。

3.1 隐式控制字符

名称方向Unicode CodeHTML Code
Left-To-Right Mark (LRM)左->右U+200E&lrm、&#x200e、&#8206
Right-To-Left Mark (RLM)右->左U+200F&rlm、&#x200f、&#8207

LRM是LTR强字符,RLM是RTL强字符。使用时要将需要改变方向的字符包裹起来,从而达到控制方向串的目的。在下面例子的第一个段落中,符号@没有被强字符包围因此使用全局方向RTL,整个文本被分为三个方向串,所以文本被重新排序。

第二个段落中,使用LRM强字符包围符号@,强制改变其方向为从左到右,此时文本只有一个LTR的方向串。即使手动设置了全局方向dir,也无法覆盖被强字符影响的中性字符。

<p dir="rtl">123456@qq.com</p>
<p dir="rtl">123456&lrm;@&lrm;qq.com</p>

在这里插入图片描述

3.2 显式控制字符

显式控制字符需要配合结束标记符使用。

3.2.1 Embedding
名称方向Unicode CodeHTML Code
Left-To-Right Embedding (LRE)左->右U+202A&#x202a, dir='ltr'
Right-To-Left Embedding (RLE)右->左U+202B&#x202b, dir='rtl'
Pop Directional Formatting (PDF)结束标记U+202C&#x202C

使用LRE或者RLE,可以改变控制字符后的文本区域的全局方向。但不影响强字符和弱字符的方向。
也可以通过dir属性或者direction样式实现。

3.2.2 Override
名称方向Unicode CodeHTML Code
Left-To-Right Override (LRO)左->右U+202D&#x202d, <bdo dir='ltr'>
Right-To-Left Override (RLO)右->左U+202E&#x202e, <bdo dir='rtl'>

LRO或者RLO会强制将控制符后的字符的方向属性覆盖为对应的方向,各种字符都会被影响。
结束标记符使用的也是PDF,在此处PDF还可以表示为</bdo>

3.2.3 Isolate
名称方向Unicode CodeHTML Code
Left-To-Right Isolate (LRI)左->右U+2066&#x2066, <bdi dir='ltr'>
Right-To-Left Isolate (RLI)右->左U+2067&#x2067, <bdi dir='rtl'>
First Strong Isolate (FSI)自适应U+2068&#x2068, <bdi dir='auto'>
Pop Directional Isolate (PDI)结束标记U+2069&#x2069, </bdi>

Isolate控制符用来在双向文字中加入脱离与其父元素的全局方向的方向串,可以使用<bdi>标签实现。<bdi>标签有点类似与<span>标签的作用,但不同的是<bdi>标签本身带有默认方向属性,dir默认值为auto。

虽然控制符和相应的HTML元素能够达到相同的控制效果,但需要注意的是,有些浏览器现阶段并不支持<bdi>等新标签,比如IE。

四、相关的CSS属性

除了上文提到的控制文本方向,我们还可以使用css中unicode-bididirection属性决定文字渲染方向、书写方向。
具体使用方法可以参考以下教程:
direction: CSS direction 属性
unicode-bidi: CSS unicode-bidi 属性

五、结语

虽然前面介绍了几种改变文本方向的方法,但实际情况会复杂得多。大家可根据实际情况使用。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Unicode控制字符 的相关文章

随机推荐

  • Ubuntu20.04软件安装大全

    目录 Ubuntu20 04 软件安装大全前言1 Windows和Ubuntu双系统安装1 1 下载Ubuntu系统镜像1 2 磁盘分区1 3 GPT分区安装Ubuntu1 4 系统完成后的一些设置1 5 遇到的一些小bug 2 换源2 1
  • 基于Nginx构建七牛云CDN静态资源加速

    创建七牛云账号 七牛云 进入管理控制台创建对象存储 3 配置nginx 使用nginx rewrite 的重定向功能进行转发到七牛云 server listen 80 server name test com 你的域名 location g
  • ChinaSkills-网络系统管理(2021年全国职业院校技能大赛A-1 模块 A:Linux 环境 真题 )

    前言 随着近年国家对技术性的比赛越来越重视 xff0c 各类技能大赛举办的相较正规 xff0c 这类大赛一般是在专科中专等技术性高中等院校中选拔优秀人才 xff0c 并且技能大赛的一等奖选手将有资格保送本科 xff0c 希望一些有能力的专科
  • Cannot resolve symbol 解决方案汇总(6种解决方案)

    Cannot resolve symbol 39 xxx 39 是比较常见一种错误 xff0c 以下整理常见的六种解决方案 xff0c 第六种会说明一下造成的原因和如何避免 方案一 检查一下pom文件依赖是否正常 xff0c 如不正常刷新m
  • 踩坑指南!import cv2出错怎么办?

    好久没有更新 xff0c 最近代码相关问题看的比较少 xff0c 有时候忙着debug就忘记了记录 xff0c 反思一下 背景 xff1a 在提取视频帧序列的时候用到了opencv包 xff0c 结果运行出错 解决 xff1a 经过查找资料
  • 最小生成树——北极通讯网络

    问题 B 北极通讯网络 时间限制 1 Sec 内存限制 128 MB 提交 17 解决 7 提交 状态 讨论版 命题人 add xiezhenghao 题目描述 北极的某区域共有n座村庄 xff08 1 n 500 xff09 xff0c
  • c++ 判定子类是否重写父类虚方法

    背景 xff1a 在做业务的时候 xff0c 有时会蹦到一个业务逻辑 xff0c 如果子类重写父类方法 xff0c 就调用 xff0c 如果没重写就不调用它 xff0c 这个逻辑在大量子类集成同一个父类的 xff0c 会节约一点点性能 xf
  • Windows | RDPWrap 远程桌面登录增强工具 (解决win10/11家庭版无法使用远程桌面 + 支持多人同时登录)

    一 前言 Windows远程桌面 Windows远程桌面是一种技术 xff0c 允许用户从远程位置访问和控制在另一个地方的Windows计算机 它可以帮助管理员和其他用户实现远程管理 技术支持和协同工作等操作 使用Windows远程桌面 x
  • 字符串匹配(java)

    字符串匹配 字符串匹配可以用到蛮力法 对于字符串s和t xff0c 若t是s的子串 xff0c 返回t在s中的位置 xff08 t的首字符在s中的下标 xff09 xff0c 否则返回 1 采用的是穷举法 xff0c 从s的第一个字符开始查
  • 警告:Establishing SSL connection without server's identity verification is not recommended

    解决方法 那问题来了 xff0c SSL是什么 xff1f SSL xff08 Secure Socket Layer xff1a 安全套接字层 xff09 利用数据加密 身份验证和消息完整性验证机制 xff0c 为基于TCP等可靠连接的应
  • NestJs-项目创建

    NestJs Nest js 用于构建高效且可伸缩的服务端应用程序的渐进式 Node js 框架 项目创建 构建工具 可以使用 npm yarn pnpm进行包管理 xff0c 但议使用pnpm建议安装nrm镜像源管理工具 xff0c 可以
  • C++ 字符串格式化

    使用snprintf格式化字符串使用boost format格式化字符串使用stringstream格式化字符串 具体示例 使用snprintf格式化字符串 span class token macro property span clas
  • 玩客云 一个百元级的微型服务器

    前言 下面这段基本是copy的 xff0c 就是图个完整 xff0c 不要觉得奇怪哈 玩客云是一款前些年很火的矿机 xff0c 曾经在官网售卖 xffe5 599 xff0c 现在已经沦落到 xffe5 45包邮的田地了 当然这边一般有两种
  • OpenStack双节点部署—M Manila(共享文件系统服务)

    Manila安装 一 数据库配置二 创建服务凭证和API端点三 安装并配置Heat四 启动服务并设置开机自启 一 数据库配置 Controller节点 mysql span class token operator span uroot s
  • Dockerfile简介

    1 什么是dockerfile Dockerfile是一个包含用于组合映像的命令的文本文档 可以使用在命令行中调用任何命令 Docker通过读取Dockerfile中的指令自动生成映像 docker build命令用于从Dockerfile
  • 论文阅读笔记1:EKT: Exercise-aware Knowledge Tracing for Student Performance Prediction

    该篇论文于2019年在IEEE发表 xff0c 作者为 xff1a Qi Liu Zhenya Huang Yu Yin Enhong Chen Hui Xiong Yu Su and Guoping Hu 等 知识追踪 xff08 Kno
  • 树莓派 同时使用有线和无线网卡

    树莓派同时使用有线和无线 使能双网卡待机 添加路由使用规范 备注 192 168 1 0 表明所有以192 168 1开始的网段 都将从后面的设备发送相应的数据 使能双网卡待机 Linux通过设置默认的网络信息实现双网卡待机 设置方法如下
  • c++20 协程本质

    c 43 43 20 协程本质 背景 xff1a 最近因项目关系 xff0c web端 xff0c js异步调用 xff0c 发现跟本门的C 43 43 20 还是有些不一样的 xff0c 本文主要从另外一个角度来看 什么是协程 协程是能暂
  • Manjaro 21安装搜狗输入法

    Manjaro 21安装搜狗输入法 文章目录 Manjaro 21安装搜狗输入法安装输入法Step 1 打开 96 Manjaro Hello 96 点击 96 Application 96 Step 2 切换语言到 96 Chinese
  • Unicode控制字符

    Unicode控制字符 一 前言 在所有主要的Web浏览器中内存中的字符顺序 xff08 逻辑 xff09 与它们显示的顺序 xff08 可视 xff09 是不同的 Unicode 定义了它其中每个字符的方向属性 xff0c 浏览器应用的一