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

Fro*_*age 29 html windows typography internationalization

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

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

有谁知道如何使Windows浏览器正确呈现它?

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

Ver*_*y_p 59

嗯......不.如果唯一的问题是 (U + 2009)仍在破坏,我宁愿使用:

<span style="white-space:nowrap">&thinsp;</span>

纠正破坏行为.为什么?

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

  • 字体用于调整其稀疏空间的宽度(U + 2009):如果这些字体是由法国版画(用于渲染法语)制作的,则approche(或单词中的字母之间的间隙)比为英语设计的字体要窄:这是因为法语文本通常包含的字母数量超过了同等的英文文本(例如印刷的圣经),并且为了避免增加打印页面的数量,法语字体中的字形变得更窄并且方法更少; 为了弥补这一减少,法国的罚款规模有所增加.(人们经常说U + 2009是cad​​ratin的五分之一,即0.2 ca.,但这是错误的,因为这个值只是一个可合理的中值,应该根据他们的设计有效地调整字体).

  • 在带有英文排版的英语中,字符间的间隙已经足够大,足以证明在大多数标点符号附近的文本中使用了无空间这一事实.但是,如果使用英文字体(具有较大的字符间间隙)使用字体呈现法语,则罚款应该更窄并且应该减少到1/6的cadratin.

  • 所以,是的,U + 2009(&thinsp;在SGML存储库中)略有可调,具体取决于字体.

  • 此外,它可能是部分合理的(当使用完全对齐时,不仅通常的字间空间的宽度增加,而且字符和正常或''精细''空间之间的所有间隙(但其他四边形空间必须)没有调整宽度:它们确实是固定的).

当您渲染其页面布局已经预先计算过的文档(使用已知字体并具有精确度量标准)时,精简空间(U + 2009)已经是您想要的(因为您不必担心破坏行为.

不幸的是,Unicode 忘记为这些四元空间U + 2000..U + 2006(以及稀疏空间U + 2009)分配行破坏属性中的非破坏行为.

Unicode纠正它的唯一方法(仅限纯文本文档)是在Unicode 5.1中添加另一个字符,即U + 202F(NARROW NON-BREAKING SPACE),后来给出了SGML符号名称"nnbsp"for字符引用(但此命名字符实体到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,或&thinsp;)在许多字体中得到很好的支持,并且具有正确的宽度,用于使用法语印刷指标制作法文文本,或者用英文印刷指标制作英文文本,这应该是每次狭窄的不间断空间不可用时,真的是正确的后备!

您可以完美地模仿U + 202F在HTML中的所需行为,只需使用U + 2009并使用CSS的"white-space:nowrap"使其不破坏.它总是比改变字体大小以显示伪半空间更好(因为这对于许多仍然太大的字体来说是不正确的,并且因为这在文本的跨度中不能正常工作有彩色背景:更改字体大小修改行高.

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

<span style="white-space:nowrap">&thinsp;</span>

您可以将此序列保存在可重复使用的模板中,Template:nnbsp例如,您可以在MediaWiki 中将其命名,以便在页面中将其转换为{{nnbsp}}.

请注意,仍然最好象征性地引用精简空间,&thinsp;而不是强制使用精确的Unicode代码点&#x2009;:命名实体可以由渲染器重新映射,或者根据用户对另一个工作空白的偏好重新映射.

请注意,MS-word确实使用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;(几乎总是太大):

简单易懂的法语; 纠正密码!(嗯......不是真的)

  • 您的答案不仅有帮助(如果有点长),而且看起来也很有教养且合理。感谢您的帮助。它确实让我们的网站本地化业务变得痛苦,因为曾经是纯文本的消息现在可能变成标记,因此需要跳过转义部分。那么您知道为什么 FireFox 和 Safari 浏览器都支持“”吗?在 Linux 和 Max OS X 上都可以,在 Windows 上不行吗?是不是只是 Linux 和 Max OS X 字体有这个符号,而 Windows 字体没有?如果浏览器实现了回退,这不会成为问题吗? (2认同)
  • Linux 和 Mac OSX 版本可能使用文本渲染库(或 OS 服务),当字体没有字符时实现回退。然后浏览器只使用这些 API 或库。鉴于 Windows 没有在其文本呈现 API(GDI、GDI+...)中实现此字体回退,使用它的浏览器无法显示该字符。我知道 Firefox 对某些字符使用了自己的内部回退,但其中许多都非常糟糕。但是我看不出为什么浏览器不会为空格实现回退本身。 (2认同)
  • 请注意,Safari 不会在 Windows 上显示 U+202F,但 Google Chrome 会显示它(即使两个浏览器都使用 WebKit,它应该使用相同的文本渲染库):Chrome 正在 Webkit 之外实现回退,或者它使用Webkit 的修补版本。 (2认同)

小智 7

附录 2021:如今,所有实际浏览器都能&#8239;很好地呈现(狭窄的不间断空间)。不再需要这些“黑客”了:-)


Ric*_*ich 5

我做了更多的挖掘,它看起来确实是一个字体问题。FileFormatInfo对于处理一般的 Unicode 问题非常有用,它包括一个页面,列出支持此特定字符的字体。甚至还有一个 Flash 工具(单击页面上列出支持的字体的蓝色框内以获取它 - 由于某种原因我无法创建正确的 URL)它列出了所有本地安装的字体并为每个字体显示了这个字符.