微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

如何在HTML for Windows中呈现狭窄的不间断空格?

在法语里,排版要求我们在不同的地方(“Commeça!”)使用狭窄的 不间断空间(U + 202F)。

显然Windows上的每个浏览器都无法支持,而且它们都显示一个奇怪的字符。 这适用于Mac OS X和Linux上的大多数浏览器。

有谁知道如何使Windows浏览器正确渲染?

(我假设这是一个Windows错误,而不是一个浏览器的错误,因为Firefox和Safari都支持它,只要它不在Windows上)。

Python gettext:将Unicode文字转换为文本

i18n / gettext:web应用程序中的setlocaleconfiguration

在Linux中的每线程语言环境

gettext-commons找不到资源包

欺骗英文安装程序在法语Windows 10上安装

文件名称翻译如何在国际Windows 7版本中工作?

Windows 7在哪里获取其语言环境数据?

标准函数翻译iso-639代码的语言名称

C ++相当于使用语言环境和stream的mbsrtowcs和wcsrtombs

为什么国际字符sed失败,如何解决

嗯…不。 如果唯一的问题是这样的事实, (U + 2009)还在打破,我宁可使用:

<span style =“white-space:Nowrap”>&thinsp; </ span>

纠正违规行为。 为什么?

因为法国的罚款是有效地使用一个几乎固定的宽度之间的六分之一到四分之一的地层(大约0.166至0.25加仑,当标准空间为0.5 ca.)宽度的选择取决于已经存在的方法给定字体中定义的字形。

字体是为了调整其精简空间的宽度(U + 2009):如果这些字体是由法语字体(用于渲染法语)制作的,则字体之间的差距(或字母之间的差距)比为英语设计的字体窄:这是因为法文文本通常包含比等效英文文本更多的字母(例如打印的圣经),并且为了避免增加打印页数,法文字体中的字形被缩小了一点,并且缩小了方法; 为了弥补这个减少,法国的罚款增加了。 (通常说U + 2009是一个cadratin的五分之一,即0.2 ca.但这是错误的,因为这个值只是一个合理的中值,应该根据其设计有效地按照字体进行调整)。

用英文排版的英文,字符之间的差距已经足够大,以证明在大多数双重标点符号附近的文本中没有使用精细空格。 但是,如果法文是用英文字体(字间差距较大)字体呈现的话, 罚款应该缩小一点,应该减至1/6层。

所以是的,U + 2009(在SGML存储库中)可以稍微调整,具体取决于字体。

此外,它可能是部分合理的(当使用全面的理由时,不仅通常的词间空间的宽度增加,而且还包括字符与正常或“精细”空间之间的所有间隙(但是其他四元空间必须没有调整宽度:他们确实是固定的)。

在渲染已经预先计算好页面布局的文档时(已知字体和精确度量),精简空间(U + 2009)已经是您想要的了(因为您不必担心破坏行为。

不幸的是,Unicode 忘了分配给这些四元空间U + 2000..U + 2006(以及U + 2009的精简空间)分拆属性中的非破坏行为。

Unicode修正它的唯一方法就是在Unicode 5.1中添加一个字符,即U + 202F(NARROW NON-BREAKING SPACE),这个字符后来被赋予了SGML符号名“nnbsp”字符引用(但是这个命名字符实体到U + 202F的映射不是任何HTML或XML标准的一部分,所以这个命名实体不应该被使用,除非你的文档在它的嵌入式DTD中明确地定义它)。

但不幸的是,大多数浏览器已经忘记应用这个补充,为什么需要它们:他们认为字符应该是字体,但是显然不是这样的。

所有的浏览器都应该把U + 202F视为不中断(即使他们不知道UCD的内部副本中的字符,情况已经如此)。

但是,浏览器不应该依赖U + 202F在字体中定义的事实,相反,它们应该在渲染时提供到U + 2009(THIN SPACE)的回退,每次U + 202F没有映射到当前字体,但是U + 2009被映射为相同的字体(对于许多字体来说这通常是这种情况)。

所以这是HTML渲染器(即浏览器)中的一个问题。 我也认为这不仅仅是一个字体的问题,如果它们不提供这样的空白回退,它实际上是一个浏览器的BUG(而不是字体的错误或限制)。 当然,所有的新字体都应该将U + 202F映射到与U + 2009相同的字形。

由于很多字体都支持很薄的空间(U + 2009,或者是),并且具有正确的宽度来呈现法式文本,法式文本是用法式印刷度量制作的,或者是用英文印刷度量制作英文文本,这应该是真正的正确的回退使用每一次狭窄的非休息空间不可用!

您可以使用U + 2009,并使用CSS的“white-space:Nowrap”使其不中断,从而完美地模拟HTML中U + 202F的行为。 它总是会比改变字体大小来显示一个伪半空间更好(因为这对许多字体来说仍然是太大了,这也不正确)有彩色背景:改变字体大小修改行高)。

因此,请在HTML或SVG文档中使用此代码(仅为纯文本文档保留U + 202F):

<span style =“white-space:Nowrap”>&thinsp; </ span>

您可以将此序列保存在可重复使用的模板中,例如,您可以在Mediawiki中命名Template:nnbsp ,将其作为{{nnbsp}}在您的页面中进行{{nnbsp}} 。

请注意,最好将稀疏空间象征性地称为&thinsp; 而不是强制一个确切的Unicode代码点像&#x2009; :指定的实体可以由渲染器重新映射,也可以根据用户对其他工作空间的偏好进行重新映射。

请注意,MS字实际上使用U + 2009而不是U + 202F来表示自己的罚款 。 这是正确的,因为Word文档具有预先计算的布局,并且考虑到MS-Word在本地执行计算页面布局时的非中断行为。 Word文档不是纯文本文档。

渲染示例(使用背景颜色表现出行高不被修改,但不幸的是,这个站点不允许设置背景颜色,除了在这里使用等宽字体的<code>部分):

Exemple de « fine » insécable française correctement codée !

没有 <code>容器的情况下,不显示背景颜色,但它使用正常的比例字体,所以稀薄的空间被有效地渲染为很薄:

例如“法语”,“法语” 纠正!

使用&#x202F;示例 (NNBSP通常在大多数字体中都不被支持,但是这可能最终与您当前的浏览器以及系统上安装的字体(如DejaVu Sans )一起工作:

例如“法语”,“法语” 纠正!

使用&#x2006;示例 (CAdratIN的第六,可能工作,但可能太狭窄,你的字体,并可能不会表现出非破坏性):

例如“法语”,“法语” 纠正! (嗯…不是真的)

使用&nbsp;例子 (这几乎总是太大):

例如“法语”,“法语” 纠正! (嗯…不是真的)

我已经做了更多的挖掘,它看起来像一个字体问题。 一般来说,FileFormatInfo对处理Unicode问题非常有用,它包含列出支持这个特定字符的字体的页面 。 甚至还有一个Flash工具(点击页面上的蓝色框,列出支持的字体到达它 – 由于某种原因,我无法创建一个正确的URL)列出所有本地安装的字体,并显示每个字符。

为什么不只是&#x202F; ?

你可以做到这一点,但这并不理想。

<span font-size:50%;"> </span>

你可以在所见即所得编辑器(如CKEditor)中按Ctrl + Shift + 2,然后转到源HTML视图。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐