Oli*_*lay 1 asp.net file character-encoding
我需要将CSV文件从iso转换为UTF-8以保留数据库中的重音符号.
当我尝试将它们翻译成UTF-8时,不会保留法语口音(é,è,ê等),它们会更改为"?".
我很难过.
我使用以下函数进行翻译:
public static string iso8859ToUnicode(string src) {
Encoding iso = Encoding.GetEncoding("iso8859-1");
Encoding unicode = Encoding.UTF8;
byte[] isoBytes = iso.GetBytes(src);
byte[] unibytes = Encoding.Convert(iso,unicode,isoBytes);
char[] unichars = new char[iso.GetCharCount(unibytes,0,unibytes.Length)];
unicode.GetChars(unibytes,0,unibytes.Length,unichars,0);
return new string(unichars);
}
Run Code Online (Sandbox Code Playgroud)
但它似乎不能很好地运作.救命?
我强烈怀疑你的原始字符串没有正确的值.我的猜测是你从文件中读取它就像是UTF-8一样.
要在两种编码之间进行转换,首先不应该使用字符串 - 基本上应该加载文件的字节并Encoding.Convert()以此方式调用.或者,使用ISO-Latin-1加载文件,并将其保存为UTF-8.例如:
public static void ConvertLatin1ToUtf8(string inputFile, string outputFile)
{
Encoding latin1 = Encoding.GetEncoding(28591);
string text = File.ReadAllText(inputFile, latin1);
File.WriteAllText(outputFile, text, Encoding.UTF8);
}
Run Code Online (Sandbox Code Playgroud)
要么
public static void ConvertLatin1ToUtf8(string inputFile, string outputFile)
{
Encoding latin1 = Encoding.GetEncoding(28591);
byte[] latinBytes = File.ReadAllBytes(inputFile);
byte[] utf8Bytes = Encoding.Convert(latin1, Encoding.UTF8, latinBytes);
File.WriteAllBytes(outputFile, utf8Bytes);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
5845 次 |
| 最近记录: |