如何获取csv文件的编码?

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 
Run Code Online (Sandbox Code Playgroud)

Esa*_*ija 5

如果您看到?,当您将文件解码为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");
}
Run Code Online (Sandbox Code Playgroud)

现在,当文件不是UTF-8时会出现异常,您可以尝试其他编码或让用户知道他的文件必须是UTF-8.