我遇到了一个关于文件编码的奇怪问题
我有一个多语言的网站;用户可以将此viá设置为网站本身的下拉列表,默认值为德语
当用户登录时,根据语言(字符集,代码页和LCID)设置一些设置。此时我还要指出,我的所有文件都是ANSI编码的。
最近,我不得不做出一些改变。
所以我启动Visual Studio 2010
,编辑有问题的文件,然后使用Filezilla将它们上传到我的服务器
现在,突然间,德语变音符号(Ää, Öö, Üü, ß
)显示不正确(类似ä
) - 但仅限于我用VS2010打开的文件。
我检查了网站上的字符集,并使用Response.CharSet
显示它,它是ISO-8859-1
,这是正确的。
所以我试着转换notepad++
,但没有成功。
我知道将charset设置为UTF-8
可以解决这个问题,但是a)charset是从数据库值设置的,b)它在其他语言中有些混乱。
答案 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 ...”
第一个读取文件作为指定的编码,第二个读取文件并将其写回选定的编码(更改文件)