Tim*_*ers 10 .net c# asp.net string localization
我在c#初始化了一个字符串,如下所示:
string strVal = "£2000";
Run Code Online (Sandbox Code Playgroud)
但是每当我写出这个字符串时,都会写下:
2000£
它不会用美元做到这一点.
我用来写出值的代码示例:
System.IO.File.AppendAllText(HttpContext.Current.Server.MapPath("/logging.txt"), strVal);
Run Code Online (Sandbox Code Playgroud)
我猜这与本地化有关,但如果c#字符串只是unicode肯定这应该有效吗?
澄清:更多信息,Jon Skeet的答案是正确的,但是当我URLncode字符串时我也遇到了问题.有没有办法阻止这种情况?
所以URL编码的字符串如下所示:
"%C2%a32000"
%c2 =Â%a3 =£
如果我编码为ASCII,那么£会出现?
还有什么想法吗?
AppendAllText 正在用UTF-8写出文本.
你用什么来看它呢?有可能是不了解UTF-8,或者不首先尝试UTF-8.告诉您的编辑/查看器它是一个UTF-8文件,一切都应该很好.或者,使用重载AppendAllText允许您指定编码并使用最方便的编码.
编辑:为了回答您编辑的问题,使用ASCII编码时失败的原因是£不是ASCII字符集(Unicode 0-127).
根据它的外观,URL编码也使用UTF-8.同样,如果要使用不同的编码,请将其指定为HttpUtility.UrlEncode接受编码的重载.
在HTML页面和HTTP标头中使用的URL的默认字符集称为ISO-8859-1或ISO Latin-1.
它与UTF-8不同,它与ASCII不同,但它确实适合每个字符一个字节.0到127的范围很像ASCII,整个范围0到255与Unicode的范围0000-00FF相同.
因此,您可以通过将每个字符转换为字节来从C#字符串生成它,或者您可以使用Encoding.GetEncoding("iso-8859-1")获取对象来为您执行转换.
(在此字符集中,英镑符号为163.)
背景
RFC表示,未编码的文本必须限制在传统的7位US ASCII范围内,并且必须对其他任何内容(加上特殊的URL分隔符字符)进行编码.但它留下了用于8位范围上半部分的字符集的问题,使其依赖于URL出现的上下文.
并且该上下文由另外两个标准HTTP和HTML定义,这些标准确实指定了默认字符集,并且它们共同为实现者创建了一种实际上不可抗拒的力量,以假设地址栏包含引用ISO-8859-1的百分比编码.
ISO-8859-1 是通过HTTP发送的基于文本的内容的字符集,除非另有说明.因此,当URL字符串出现在HTTP GET标头中时,它应该在ISO-8859-1中.
另一个因素是HTML也使用ISO-8859-1作为默认值,而URL通常作为HTML页面中的链接发起.因此,当您在记事本中创建一个简单的最小HTML页面时,您在该文件中键入的URL在ISO-8859-1中.
它有时在标准中被描述为"洞",但事实并非如此; 只是HTML/HTTP填写了RFC为URL留下的空白.
因此,例如,此页面上的建议:
字符的URL编码由"%"符号组成,后跟字符的ISO-Latin代码点的两位十六进制表示(不区分大小写).
(ISO-Latin是IS-8859-1的另一个名称).
这个理论太多了.将其粘贴到记事本中,将其另存为.html文件,然后在几个浏览器中打开它.点击链接,谷歌应该搜索英镑.
<HTML>
<BODY>
<A href="http://www.google.com/search?q=%a3">Test</A>
</BODY>
</HTML>
Run Code Online (Sandbox Code Playgroud)
它适用于IE,Firefox,Apple Safari,谷歌浏览器 - 我现在没有任何其他可用的.
| 归档时间: |
|
| 查看次数: |
8754 次 |
| 最近记录: |