当前位置: 首页 > 知识库问答 >
问题:

如何在C#中将字符串转换为UTF-8?

沃念
2023-03-14

我有一个从第三方应用程序收到的字符串,我希望在我的Windows界面上使用C#以任何语言正确显示它。

由于编码不正确,我的字符串中有一段在西班牙语中如下所示:

AcciÃn

然而它应该看起来像这样:

阿克松

根据这个问题的答案:如何知道C#中的字符串编码,我接收到的编码应该已经在UTF-8中出现了,但它是在编码时读取的。默认值(可能是ANSI?)。

我试图将这个字符串转换成真正的UTF-8,但问题之一是我只能看到编码类的一个子集(仅限UTF8和Unicode属性),可能是因为我仅限于窗口表面应用编程接口。

我试过在互联网上找到的一些片段,但到目前为止,在东方语言(如韩语)中,没有一个片段被证明是成功的。一个例子如下:

var utf8 = Encoding.UTF8;
byte[] utfBytes = utf8.GetBytes(myString);
myString= utf8.GetString(utfBytes, 0, utfBytes.Length);     

我还尝试将字符串提取到字节数组中,然后使用UTF8。GetString:

byte[] myByteArray = new byte[myString.Length];
for (int ix = 0; ix < myString.Length; ++ix)
{
    char ch = myString[ix];
    myByteArray[ix] = (byte) ch;
}

myString = Encoding.UTF8.GetString(myByteArray, 0, myString.Length);

你们还有其他想法我可以试试吗?

共有3个答案

卫胜
2023-03-14

您的代码正在读取UTF8编码的字节序列,并使用8位编码对其进行解码。

您需要修复该代码以将字节解码为UTF8。

或者(不理想),您可以将坏字符串转换回原始字节数组——通过使用不正确的编码进行编码——然后将字节重新解码为UTF8。

范峰
2023-03-14
string utf8String = "Acción";
string propEncodeString = string.Empty;

byte[] utf8_Bytes = new byte[utf8String.Length];
for (int i = 0; i < utf8String.Length; ++i)
{
   utf8_Bytes[i] = (byte)utf8String[i];
}

propEncodeString = Encoding.UTF8.GetString(utf8_Bytes, 0, utf8_Bytes.Length);

输出应该是

阿克松

一天™s显示一天的时间

调用DecodeFromUtf8();

private static void DecodeFromUtf8()
{
    string utf8_String = "day’s";
    byte[] bytes = Encoding.Default.GetBytes(utf8_String);
    utf8_String = Encoding.UTF8.GetString(bytes);
}
端木鹏
2023-03-14

如您所知,字符串将以Encode的形式出现。默认您可以简单地使用:

byte[] bytes = Encoding.Default.GetBytes(myString);
myString = Encoding.UTF8.GetString(bytes);

另外一件事您可能必须记住:如果您使用的是控制台。WriteLine以输出一些字符串,然后还应该编写控制台。输出编码=系统。文本编码。UTF8 !!!或者所有utf8字符串将作为gbk输出。。。

 类似资料:
  • 问题内容: 如何在Swift中将字符串转换为Unicode(UTF-8)字符串? 在Objective中,我可以这样写: 如何在Swift中做类似的事情? 问题答案: 使用此代码, 希望对您有所帮助

  • 问题内容: 我无法在Android中将字符串转换为UTF-8。请帮我!! 结果: 但是“ ”应该编码为“ ” 问题答案: 在http://developer.android.com/reference/java/net/URLEncoder.html中,您可以了解到您使用的已弃用,应该使用 所以应该做到这一点。

  • 问题内容: 从我的数据库即时通讯获取以下字符串: 它应该说的是: 我试图像这样将其转换为utf-8: 但是仍然是同样的问题。 有任何想法吗? 问题答案: 使用npm中的utf8模块对字符串进行编码/解码。 安装: 在浏览器中: 在Node.js中: API: 编码: 将任何给定的JavaScript字符串(字符串)编码为UTF-8,并返回该字符串的UTF-8编码版本。如果输入字符串包含非标量值(即

  • 问题内容: 我需要将unicode字符串转换为具有以unicode编码的非ascii字符的字符串。例如,字符串“汉字Max”应显示为“ \ u6F22 \ u5B57 Max”。 我尝试过的 的不同组合 新的String(sourceString.getBytes(encoding1),encoding2) Apache StringEscapeUtils也会转义ascii字符,例如双引号 Str

  • 问题内容: 我正在阅读有关python的新f字符串的 博客 ,它们看起来很整洁。但是,我希望能够从字符串或文件中加载f字符串。 我似乎找不到任何执行此操作的字符串方法或其他函数。 从上面我的链接中的示例: 但是,如果我有琴弦怎么办?我希望能够像这样: 事实证明,我已经可以执行类似的操作并获得性能提高。即: 问题答案: f字符串是代码。不仅以安全的方式(当然,字符串文字就是代码),而且以危险的任意代

  • 我有一个像“示例”这样的字符串。我想得到十六进制格式的字符串;像这样: 请给出C#语法。