2

我收到了来自一个应用程序的崩溃报告,该应用程序试图从之前编写的文件中读取 XML。在请求用户向我发送文件后,我将它与应该编写的文件进行了比较,发现了一个我以前没有遇到过的非常奇怪的问题。

一些(但不是全部)i字符已被替换为ı- 无点 i。例如,一个名为“title”的节点很好,但一个名为“initialdirectory”的节点将第一个 i 替换,第二个被单独保留,即ınitialdirectory.

直到今天,我什至不知道有这样一个字符,但现在我知道了,但我只是不知道它是如何编写的——XML 是使用XmlWriterUTF8 编码编写的。只是一个普通的日常写作,没有什么复杂的。

我通常(嗯,因为得到 Resharper 并且它因为跳过参数而对我大喊大叫)StringComparison.OrdinalIgnoreCase在执行IndexOf等操作时使用,但是我不知道在写入数据时应该如何执行此操作,除非我应该开始改变线程文化。

以前有没有人遇到过类似的问题,如果有,最好的解决方法是什么?

4

1 回答 1

5

在土耳其语中有两个 i:一个带点 ,i一个不带点 , ı。在大写的情况下,第一个有一个点,,İ而第二个没有,I

在某些时候,您的程序会InitialDirectory根据默认语言环境转换为小写字母,在世界某些地方,默认语言环境是土耳其语。要解决此问题,您可以使用固定的已知语言环境(例如美式英语)转换大小写。

更新:更好的是,在“不变文化”ToLowerInvariant()中使用将字符串转换为小写的方法。

于 2013-04-04T21:47:44.077 回答