tou*_*ugh 1 .net csv character-encoding
可能重复:
使用BULK INSERT未正确导入重音字符
在我的系统中运行的.net程序为我提供了一个csv文件.我想知道该文件的编码.
csv文件具有é,ä,å,æ的字符,但被示出为(UTF8-与BOM).我是否有可能将这些角色押注为原始角色或英文角色.
csv文件是由在同一用户下同一台机器上运行的.net程序创建的,但在创建文件后我看不到原始字符.
sample data (UTF8-Without BOM) from csv file. 
Pok?mon Black Version
TGC ? Nintendo
on H?tel de R?ve  
La Reine Masqu?e et la Tour des Miroirs 
如果您看到?,当您将文件解码为UTF-8时,但是您看到�,当您将其解码为Windows-1252时,该文件确实包含?.IE它实际上包含字节0xEF 0xBF 0xBD(UTF-8 ?).因此,此时数据无法恢复.
当某些字节流的物理编码与用于解码它的编码不匹配时,会发生这种情况.因此,例如,物理编码是Windows-1252,然后程序使用带有替换回退的UTF-8将其解码为内部字符串.现在,字符串内部包含?,但它没有被检查,并以UTF-8的形式写入文件,结果文件就是你拥有的.
为避免最初的搞砸,最好在解码文件时使用异常回退而不是替换回退,例如:
Encoding enc = Encoding.GetEncoding(
    "UTF-8",
    new EncoderExceptionFallback(),
    new DecoderExceptionFallback()
);
try
{
    File.ReadAllText(@"myfile.csv", enc);
}
catch (DecoderFallbackException e)
{
    Console.WriteLine("This file was not encoded in UTF-8, try some other encoding");
}
现在,当文件不是UTF-8时会出现异常,您可以尝试其他编码或让用户知道他的文件必须是UTF-8.
| 归档时间: | 
 | 
| 查看次数: | 4298 次 | 
| 最近记录: |