我在包含重音字符的字符串上使用Directory.Exists()
时遇到问题。
这是目录路径:D:\ést_test\scenery
。它作为我正在解析的文件中的简单字符串进入:
[Area.121]
Title=ést_test
local=D:\AITests\ést_test
Layer=121
Active=FALSE
Required=FALSE
我的代码使用本地值并向其添加\scenery
。我需要测试它是否存在(它确实存在)并且只是使用:
if (!Directory.Exists(area.Path))
{
// some handling code
area.AreaIsValid = false;
}
返回false。我正在做的字符串处理似乎正在替换重音字符。 VS2012中的文本可视化器显示了这一点(directoryManager只是一个环绕System.IO.Directory
):
显示的警告信息显示:
所以似乎没有被识别出重音字符。搜索此问题确实出现了,但主要是关于删除或替换重音字符。我目前正在使用'普通'字符串处理。我尝试使用FileInfo
,但无论如何这条路似乎都被破坏了。
所以我的第一个问题是如何将路径存储到字符串中以便它通过Directory.Exists
测试?
这引发了路径名中非拉丁字符的更广泛问题。我有世界各地的用户,所以我可以看到阿拉伯语。俄罗斯人,中国人等在路上。我该如何处理所有这些?
答案 0 :(得分:6)
问题几乎可以肯定是你用错误的编码加载文件。它是文件名这一事实无关紧要 - 屏幕截图显示您在致电Directory.Exists
之前丢失了相关数据。
您应确保知道文件编码(例如UTF-8,Cp1252等),然后将其作为参数传入,但是您要加载文件(例如File.ReadAllText
)。如果这不足以让您前进,您需要告诉我们有关该文件的更多信息(以确定其中的编码)以及有关您的代码的更多信息(如何阅读)。
一旦你设法加载了正确的数据,我就希望文件方面只是自动处理。