Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/89.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Html UTF8编码的现场重音符号位置不正确(仅限西里尔文字)_Html_Encoding_Utf 8_Non Ascii Characters - Fatal编程技术网

Html UTF8编码的现场重音符号位置不正确(仅限西里尔文字)

Html UTF8编码的现场重音符号位置不正确(仅限西里尔文字),html,encoding,utf-8,non-ascii-characters,Html,Encoding,Utf 8,Non Ascii Characters,我正在开发网页,其中包含一些带有重音符号的西里尔文字。要放置应力标记,我使用utf8字符U0301(结合锐重音)。在我已经使用过的每一个编辑器和我已经看到的每一个西里尔文相关网页中,这个重音符号都显示在文本中这个字符前面的字母上方。我的问题是,在我的页面上,这个字符显示在字母的上方,字母在文本中位于这个标记之后。更重要的是,这种不正确的行为只能在西里尔语中观察到。对于常用的拉丁语单词,它会正确显示 我设置了每个编码相关的头 [编辑] 这个问题似乎只出现在Firefox上(我使用的是13.0.1版

我正在开发网页,其中包含一些带有重音符号的西里尔文字。要放置应力标记,我使用utf8字符U0301(结合锐重音)。在我已经使用过的每一个编辑器和我已经看到的每一个西里尔文相关网页中,这个重音符号都显示在文本中这个字符前面的字母上方。我的问题是,在我的页面上,这个字符显示在字母的上方,字母在文本中位于这个标记之后。更重要的是,这种不正确的行为只能在西里尔语中观察到。对于常用的拉丁语单词,它会正确显示

我设置了每个编码相关的头

[编辑]


这个问题似乎只出现在Firefox上(我使用的是13.0.1版)。当我使用Chrome浏览器时,会正确显示重音符号。

这可能与您在每个浏览器上设置的默认字体有关,和/或浏览器拥有默认样式?我已经尝试过这一点——在Firefox中,Times的口音是完全一致的,但在Arial中,它很不错,但有点偏右

另一方面,Chrome与Arial的搭配还可以,但时代已经向右移

您是否尝试过调整使用的字体系列、行高、字体大小等,以查看这是否会影响问题

编辑:此外,请阅读以下建议:

像Times New Roman和Georgia这样的字体中包含西里尔字母 Windows,但在Macintosh上,它们可能只包含在“CY”中 苹果的西里尔字体,如“Times CY”


根据对不同字体的试验,选择合适的字体列表,用于文本的
字体系列
规则,最好在不同的平台上,也可能在不同的浏览器上。您可以使用不同的字体设置在您喜爱的文字处理器(或编辑器)中测试字体;结果不一定与web浏览器中的结果相同,但通常相似。例如,Calibri和Arial看起来不错,衬线侧的Cambria也不错(Times New Roman对U+0301没有问题,但除非分辨率相当高,否则总体上效果不好)

也可以考虑使用适当的字体作为Web字体(通过<代码> @字体脸< /代码>)。p> 这听起来很混乱,但实际上是一种实用的方法。问题有三个方面:

  • 在某些字体中,U+0301完全错误,或者有点错误。例如,在佐治亚州(通常为OK字体),U+0301出现在基本字符的右侧,好像它根本不是一个组合标记,而是一个单独的符号。在Courier New中,它将放置在下一个字符上。在《君士坦提亚》和《自由女神》中,它的位置太对了,尽管仍然可以识别为变音符号
  • 有些字体完全缺少U+0301,这迫使浏览器使用基本字母以外的字体。不用说,这可能会造成混乱(或者你可能会侥幸逃脱,如果它恰好适合的话)
  • 浏览器和其他程序在处理组合标记方面有所不同。你对此无能为力。即使对于U+0301实现良好的字体,较旧的浏览器也很容易产生较差的结果。原因是正确放置变音符号是一个复杂的操作:程序需要访问有关基本字符的信息,以便将例如锐字符以不同的方式放置在小写字母Of上,而不是大写字母Of上
  • 我无法解释为什么Firefox和Chrome上的结果不同,除非你将字体保留为默认值,并且浏览器使用不同的默认值

    当U+0301与西里尔字母组合失败时,U+0301与拉丁字母组合(许多)效果良好的原因可能是完全不同的处理方式。浏览器可能,而且通常会,将字母和组合变音符号的组合呈现为单个字形,对应于所谓的预合成字符。因此,如果浏览器看到
    ,其中
    o
    是拉丁字母,它在内部将其映射到最常用字体中包含的单个字符“ó”U+00F3


    作为一个排版细节,当目标是非常好的质量(我们通常负担不起…)时,像a、e、o、y这样的拉丁字母应该与同一文本中的西里尔字母(形状)完全相同。这些设计在任何像样的字体上都是相同的。但不幸的是,当添加口音时,这种情况可能会改变。例如,在Calibriö́中(西里尔字母o加锐音符)的口音与ó(拉丁字母o加锐音符)的口音不同。这是字体的设计缺陷。(但在典型的复制文本大小中,差异几乎不明显。)

    我使用过谷歌字体服务的字体Roboto,它也有同样的问题——重音位置错误

    为了解决这个问题,我已经将这个字体(ttf版本)下载到我的电脑上,安装并打开photohosop,确保实际的口音是正确的!然后我将字体上传到fontsquirrel.com服务,并转换成我自己的网络字体,然后口音就被修复了!除上述西里尔字母外。。但是,这总比什么都没有好


    提示-如果您有多个字体权重,那么在fontsquirrel.com上选择“专家…”并选中“样式链接”-它将组成css,这样您将有一个具有不同权重的字体名称。

    您使用的是从右到左的语言吗?@flem I使用从左到右的俄语书写。我试图将lang=“ru”和dir=“ltr”属性添加到包含西里尔语单词的元素中,但并没有帮助。
    .serifcyr {
        font-family: "Times CY", "Times New Roman", serif
    }
    .noserifcyr {
        font-family: "Geneva CY", "Helvetica CY", "Arial", sans-serif
    }