为什么“我”被“ı”取代

时间:2013-04-04 21:40:05

标签: c# xml localization culture

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

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

直到今天,我甚至都不知道有这样一个角色,但现在我这样做了,我只是不知道它是如何编写的那样 - XML是使用带有UTF8编码的XmlWriter编写的。只是一般的日常写作,没有什么复杂的。

我通常(好吧,因为得到Resharper并且它在跳过参数时对我大吼大叫)在执行StringComparison.OrdinalIgnoreCase等时使用IndexOf,但我对我应该怎么做不知所措在写数据时这样做,除非我应该开始改变线程文化。

之前有没有人遇到类似的问题,如果有的话,最好的方法是什么?

1 个答案:

答案 0 :(得分:5)

在土耳其语中有两个i:一个带点i,一个带点,ı。在大写字母中,第一个有一个点İ,第二个没有,I

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

更新:更好的是,使用ToLowerInvariant()方法将{4}}中的字符串转换为小写。