概述
之前看到一个tester提交的代码修了一个处理URI解析的问题,其中有一步是想得到一个传入的uri的绝对路径,当然之前的代码理所当然地用了uri.AbsoluteUri来取值,这个当然没有问题。但是,localization的问题又来了,现在的场景是传入了一个非EN的path,比如:
string local = @"E:/サwォ’アフィ.xt", 然后在debug时看到的信息是这样的:
- uri {file:///E:/サwォ’アフィ;txt} System.Uri
AbsolutePath "E:/%E3%82%B5%EF%BD%97%E3%82%A9%E2%80%99%E3%82%A2%E3%83%95%E3%82%A3;txt" string
AbsoluteUri "file:///E:/%E3%82%B5%EF%BD%97%E3%82%A9%E2%80%99%E3%82%A2%E3%83%95%E3%82%A3;txt" string
很明显,这里的日文字符作了编码,所以才看到了%**。 当然,现在的代码是用了uri.ToString()直接得到uri的全部内容,到目前为止这个tester没有想到除此以外的方法 =)
不过针对这点,作了一个小调查,即为什么uri在AbsolutePath/AbsoluteUri得不到预期的内容?
http://en.wikipedia.org/wiki/URI_encoding#Types_of_URI_characters 里面可能会有一些启示,大致的意思是uri会有2种percent-encoding的方式,reserved模式是针对一些特殊字符的,比如!·##¥,etc;
unreserved模式则是针对除此以外的字符,比如一些unicode的东西。所以看到%**是一种dy design的现象,所以C#的URI得到的是编码后的结果。
这个小问题给出的启示是:有时候会忽略本地化的问题,不管是开发还是测试都是如此。当然在作测试时候,特别那些接受输入时候api,请试试一些中文(unicode), 说不定你的api 就有问题了。
最后
以上就是清脆战斗机为你收集整理的URI解析非英文的问题的全部内容,希望文章能够帮你解决URI解析非英文的问题所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复