c# - 为什么这会出现在我的 C# 字符串 : £ 中

标签 c# .net asp.net localization string

我在 c# 中有一个字符串初始化如下:

string strVal = "£2000";

但是每当我写出这个字符串时,都会写出以下内容:

2000 英镑

它不会用美元来做这件事。

我用来写出值的代码示例:

System.IO.File.AppendAllText(HttpContext.Current.Server.MapPath("/logging.txt"), strVal);

我猜这与本地化有关,但如果 C# 字符串只是 unicode,那么这应该就可以了吗?

澄清: 更多信息,Jon Skeet 的回答是正确的,但是我在对字符串进行 URLEncode 时也遇到了问题。有什么办法可以避免这种情况吗?

所以 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接受编码的重载。

关于c# - 为什么这会出现在我的 C# 字符串 : £ 中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/696659/

相关文章:

c# - CommandParameter 始终通过 ElementName 绑定(bind)传递 EventArgs,没有实际绑定(bind)值

c# - VS2015 C# interactive : error CS7069: Reference to type 'Object' claims it is defined in 'System.Runtime' , 但找不到

c# - 当创建它的线程终止时,COM 对象是否被 CLR 释放?

c# - 使用 Window.Open 而不是 Response.Redirect 打开新窗口?

c# - 如何在 LINQ 中分组然后选择元素到新类中(最好是 C#)

c# - Visual Studio 2012 - Razor View 文件 (".cshtml"中的断点)未加载

c# - 如何在 SQL Server 数据库中保存文本和图像的组合

c# - 如何代码重用apsx?

javascript - 使用 JavaScript 检查重复数据

c# - 在 POST 中从表单序列化备用属性名称