文件读取外来字符

Posted

技术标签:

【中文标题】文件读取外来字符【英文标题】: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。我贴出来了。 【参考方案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 都可以。谢谢;)

以上是关于文件读取外来字符的主要内容,如果未能解决你的问题,请参考以下文章

Python - 使用 utf-8 编码读取和写入 csv 文件

带有外来字符的 URL 和标题

如何读取CSV文件以及如何读取带有字符串数据项的CSV文件

C 语言文件操作 ( 配置文件读写 | 读取配置文件 | 函数接口形参 | 读取配置文件的逐行遍历操作 | 读取一行文本 | 查找字符 | 删除字符串前后空格 )

java io流(字符流) 文件打开读取文件关闭文件

使用 UTF-8 编码,具有特殊属性/外来字符的 CSV 文件在导入 MySQL (phpMyAdmin) 时不保留