如何处理目录名称中的重音字符

时间:2013-01-07 17:20:03

标签: c# localizable.strings

我在包含重音字符的字符串上使用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):

enter image description here

显示的警告信息显示:

enter image description here

所以似乎没有被识别出重音字符。搜索此问题确实出现了,但主要是关于删除或替换重音字符。我目前正在使用'普通'字符串处理。我尝试使用FileInfo,但无论如何这条路似乎都被破坏了。

所以我的第一个问题是如何将路径存储到字符串中以便它通过Directory.Exists测试?

这引发了路径名中非拉丁字符的更广泛问题。我有世界各地的用户,所以我可以看到阿拉伯语。俄罗斯人,中国人等在路上。我该如何处理所有这些?

1 个答案:

答案 0 :(得分:6)

问题几乎可以肯定是你用错误的编码加载文件。它是文件名这一事实无关紧要 - 屏幕截图显示您在致电Directory.Exists之前丢失了相关数据。

您应确保知道文件编码(例如UTF-8,Cp1252等),然后将其作为参数传入,但是您要加载文件(例如File.ReadAllText)。如果这不足以让您前进,您需要告诉我们有关该文件的更多信息(以确定其中的编码)以及有关您的代码的更多信息(如何阅读)。

一旦你设法加载了正确的数据,我就希望文件方面只是自动处理。