【问题标题】:File read foreign characters文件读取外来字符
【发布时间】:2016-09-04 15:49:27
【问题描述】:

我正在尝试从 .ini 文件中读取外来字符。 这是我正在使用的方法

[DllImport("kernel32")]
public static extern int GetPrivateProfileString(string Section, 
                                                 int Key,
                                                 string Value,
                                                 [MarshalAs(UnmanagedType.LPArray)] byte[] Result,
                                                 int Size, 
                                                 string FileName);

public static string[] GetEntryNames(string section, string iniPath)
    {
        for (int maxsize = 500; true; maxsize *= 2)
        {
            byte[] bytes = new byte[maxsize];
            int size = Imports.GetPrivateProfileString(section, 0, "", bytes, maxsize, iniPath);
            if (size < maxsize - 2)
            {
                string entries = Encoding.ASCII.GetString(bytes, 0,
                                          size - (size > 0 ? 1 : 0));
                Console.WriteLine("Entries: " + entries.Split(new char[] { '\0' })[3]);
                return entries.Split(new char[] { '\0' });
            }
        }
    }

我正在使用Encoding.ASCII,但显然GetPrivateProfileString 不是。从它出来的字节可能需要编码。我该怎么做?

编辑:示例

这将打印:Tavar?而不是塔瓦雷

【问题讨论】:

  • 你确定它没有正确读取,而不是只是Console.WriteLine
  • @LegionMammal978 是的。将其设置在标签上并得到相同的结果
  • @JohnP。尝试使用Encoding.UTF8Encoding.GetEncoding("iso-8859-1") 作为法语字符
  • @Xiaoy312 回答问题,以便我接受答案。你值得拥有
  • @JohnP。我贴出来了。

标签: c# file encoding char byte


【解决方案1】:

要阅读包含法语口音的文本,您通常需要使用以下编码之一:

  • Encoding.UTF8
  • Encoding.GetEncoding("iso-8859-1")
  • Encoding.GetEncoding("windows-1252")

编辑:这些适用于 OP:

  • Encoding.UTF7
  • Encoding.GetEncoding("iso-8859-1")

【讨论】:

    【解决方案2】:

    免责声明:我几乎没有 C# 经验

    它可能使用的是 Unicode,所以试试这个:

    Encoding.Unicode.GetString(bytes, 0, size - (size > 0 ? 1 : 0));
    

    还有这个:

    Encoding.UTF8.GetString(bytes, 0, size - (size > 0 ? 1 : 0));
    

    还有这个:

    Encoding.UTF32.GetString(bytes, 0, size - (size > 0 ? 1 : 0));
    

    【讨论】:

    • 没有Encoding.UTF16,但有Encoding.Unicode:使用小端字节序获取UTF-16格式的编码。
    • @Xiaoy312 在发布之前我已经尝试了所有这些建议。都不是。
    • @JohnP。 Encoding.GetEncoding("iso-8859-1") 也没用?
    • @Xiaoy312 实际上 UTF7 和 UTF7 都可以。谢谢;)
    猜你喜欢
    • 2013-11-22
    • 1970-01-01
    • 1970-01-01
    • 2012-03-25
    • 1970-01-01
    • 1970-01-01
    • 2012-03-03
    • 1970-01-01
    • 2013-04-15
    相关资源
    最近更新 更多