我是靠谱客的博主 清脆战斗机,最近开发中收集的这篇文章主要介绍URI解析非英文的问题,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

之前看到一个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解析非英文的问题所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(49)

评论列表共有 0 条评论

立即
投稿
返回
顶部