4

我在文件编码方面遇到了一个奇怪的问题。
我有一个多语言网站;用户可以通过网站本身的下拉菜单进行设置,默认值为德语。
当用户登录时,根据语言(字符集、代码页和 LCID)设置一些设置。在这一点上,我还想指出,我所有的文件都是 ANSI 编码的。

最近,我不得不做出一些改变。
所以我启动Visual Studio 2010,编辑有问题的文件并使用 Filezilla 将它们上传到我的服务器。
现在,突然之间,德语变音符号 ( Ää, Öö, Üü, ß) 显示不正确(类似于ä) - 但仅在我使用 VS2010 打开的文件上。
我检查了网站本身的字符集,并将其显示为Response.CharSetand it ISO-8859-1is ,这是正确的。

所以我尝试了一些转换notepad++,但没有成功。

我知道将字符集设置为UTF-8可以解决这个问题,但是a)字符集是从数据库值设置的,b)它在其他语言中有点搞砸了。

4

2 回答 2

4

您正在显示一个带有 iso-8859-1 视图的 utf-8 编码文件。通常你只想看到一个字符,但为什么你看到的是两个而不是一个?这是因为在 utf-8 中,带有“两个点”的德语小“a”字母是带有 utf-8(0xC3 和 0xA4)的 2 字节序列。如果它没有显示为 utf-8 而是显示为 iso-8859-1 编码 - 这意味着一个字节一个字符 - 你会得到你所提到的。您将获得作为单个 iso-8859-1 字符的起始字节 0xC3 和作为单个 iso-8859-1 字符的后续字节 0xA4。在 utf-8 中,这个 2 字节序列必须通过提取 startbyte 的有效负载位和以下字节来解码,如下所示:

起始字节:11000011
后续:10100100

所以必须去掉 110 个起始字节,所以剩下 11 个。所以后面的 10 个字节必须被剥离,所以剩下 100100。

链接在一起就变成了 11100100,它是十进制的 228,应该等于德语字符 'a with two dot' unicode codepoint。

我建议让编码保持原样,utf-8。只是查看器/编辑器的编码应该将 utf-8 编码文件显示为 utf-8 而不是 iso-8859-1。使用 utf-8 配置查看器/编辑器。换句话说,根据文件内容的编码(在您的情况下是 utf-8 而不是 iso-8859-1)配置查看器/编辑器的编码。

要转换您的文件或检查它们的特定编码,只需使用madedit。madedit 有一个内置的十六进制编辑器,它在 utf-8 序列周围包裹一个矩形,在右侧仅显示一个字符(编码的代码点)。在 utf-8 编码文件中识别单字节字符和/或 2/3/4 字节序列很容易。它还在 3 字节 utf-8 BOM(如果有)周围包裹了一个矩形。

于 2013-11-27T14:59:45.817 回答
1

编码问题有几个失败点:

  • 检查模板文件编码
  • 检查响应编码
  • 检查数据库编码

检查它们是否与您要输出的内容一致。

另请注意,Notepad++ 具有“编码为...”和“转换为...”

第一个读取文件作为指定的编码,第二个读取文件并将其写回选定的编码(更改文件)

于 2013-09-18T14:02:09.657 回答