文件读取外来字符
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.UTF8
或Encoding.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 文件
C 语言文件操作 ( 配置文件读写 | 读取配置文件 | 函数接口形参 | 读取配置文件的逐行遍历操作 | 读取一行文本 | 查找字符 | 删除字符串前后空格 )