尽管Charset正确,德国变音符号显示错误

时间:2013-09-17 13:30:20

标签: visual-studio-2010 utf-8 asp-classic character-encoding codepages

我遇到了一个关于文件编码的奇怪问题                 我有一个多语言的网站;用户可以将此viá设置为网站本身的下拉列表,默认值为德语                 当用户登录时,根据语言(字符集,代码页和LCID)设置一些设置。此时我还要指出,我的所有文件都是ANSI编码的。

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

                所以我试着转换notepad++,但没有成功。

                我知道将charset设置为UTF-8可以解决这个问题,但是a)charset是从数据库值设置的,b)它在其他语言中有些混乱。

2 个答案:

答案 0 :(得分:4)

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

Startbyte:11000011
以下:10100100

所以110的startbyte必须被剥离,所以剩下11个。 因此必须剥离以下10个字节,因此留下100100。

链接在一起,这将成为11100100,即小数228,应该等于德语字符“a with two dots”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(如果有的话)包裹一个矩形。

答案 1 :(得分:1)

编码问题有几个失败点:

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

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

另请注意,Notepad ++有一个“Encode as ...”和一个“Convert to ...”

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