Unicode 显示全宽字符,长度正好是半宽字符的两倍?

Unicode 显示全宽字符,长度正好是半宽字符的两倍?,unicode,multibyte,fixed-width,monospace,Unicode,Multibyte,Fixed Width,Monospace,我不确定这是否是问这个问题的正确地点,但我不知道还有其他更适合的网站。这个问题与编程有关,所以: 我正在写一本格式化的txt指南。请看以下摘录:。我需要显示全宽字符,以便它们占用的空间正好是半宽字符的两倍。虽然单间距字体似乎只使用半宽字符就可以正常工作,但我尝试过的大多数全宽固定宽度字体并没有产生预期的效果 在firefox中,当我将monospace字体编辑>首选项>内容>高级设置为monospace时,这一点就起作用了。但仅适用于14号字体。gedit也是一样,固定宽度字体MS哥特式,仅适用

我不确定这是否是问这个问题的正确地点,但我不知道还有其他更适合的网站。这个问题与编程有关,所以:

我正在写一本格式化的txt指南。请看以下摘录:。我需要显示全宽字符,以便它们占用的空间正好是半宽字符的两倍。虽然单间距字体似乎只使用半宽字符就可以正常工作,但我尝试过的大多数全宽固定宽度字体并没有产生预期的效果

在firefox中,当我将monospace字体编辑>首选项>内容>高级设置为monospace时,这一点就起作用了。但仅适用于14号字体。gedit也是一样,固定宽度字体MS哥特式,仅适用于13/14号字体

我觉得这种行为很奇怪,不想让我的读者被技术细节所困扰,有没有人提出建议或提供任何资源,或者可以解释这里发生了什么?为什么仅仅用一个固定的大小显示每个glyph看起来如此困难


提前感谢您抽出时间。

这似乎与舍入分数像素有关

当字形的宽度不是屏幕像素的整数时,字体渲染器可能会调整水平位置。我相信gedit和Firefox在Linux上使用的Cairo渲染不会对字体进行亚像素定位,所以这里可能需要这样做

在真正的单空格字体中,这并不重要,因为每个字形都具有相同的宽度,因此接受相同的处理,但如果混合了全半宽字符,则舍入将不均匀,除非字形恰好是整像素宽,这在字体大小为14的情况下发生

请注意,对于大多数小尺寸的Windows,将使用字体文件中的自定义内置位图渲染MS哥特式字体,而不是渲染轮廓及其度量。这使得所有图示符都必须具有固定数量的像素宽。然而,这确实导致了典型的老式“锯齿状”渲染风格

如果您正在生成格式化的文本文件,那么实际上对此您无能为力。你只能希望你的目标读者有适合的日文单间隔字体,并且可以切换到特定字体大小的字体


我同意克莱门特的意见,即使用HTML获得您想要的渲染效果将更加健壮、现代和方便。使用HTML进行布局可以让您不必担心字符的排列,并且可以获得比所有半角等距拉丁语更美观的字体。

您可以使用HTML而不是文本。这将解决问题。你的用户也不会有任何问题。这就是为什么微软的字体看起来比苹果的字体更糟糕的原因吗?我使用Opera并经常缩放到有趣的百分比。苹果的字体很平滑,但微软的字体却非常粗糙。@tchrist:当然,Windows上的CJK字体在历史上是非常糟糕的。在ClearType之前,字体“平滑”算法非常糟糕,尤其是汉字。即使使用XP+中的ClearType,您也必须使用像Meiryo这样的字体,这些字体专门设计为使用严格的水平笔划,而不是近乎水平的笔划,因为ClearType只喜欢沿X轴使用反别名,这通常适用于拉丁字母形状,但对CJK表意文字来说是一场灾难这几天终于出现在WPF中了,但大多数应用程序都没有使用它,所以我们只能使用Meiryo,或者同时使用锯齿状的水平笔划。