gpt4 book ai didi

c# - UTF32 和 C# 问题

转载 作者:太空狗 更新时间:2023-10-29 19:39:41 25 4
gpt4 key购买 nike

所以我在字符编码方面遇到了一些麻烦。当我将以下两个字符放入 UTF32 编码的文本文件中时:

𩸕

然后在它们上运行这段代码:

System.IO.StreamReader streamReader = 
new System.IO.StreamReader("input", System.Text.Encoding.UTF32, false);
System.IO.StreamWriter streamWriter =
new System.IO.StreamWriter("output", false, System.Text.Encoding.UTF32);

streamWriter.Write(streamReader.ReadToEnd());

streamWriter.Close();
streamReader.Close();

我得到:



(相同字符两次,即输入文件!=输出)

一些可能有帮助的事情:第一个字符的十六进制:

15 9E 02 00

第二个:

15 9E 00 00

我使用 gedit 来创建文本文件,使用 mono 来创建 C#,我正在使用 Ubuntu。

如果我指定输入或输出文件的编码也没有关系,如果它是 UTF32 编码它只是不喜欢它。如果输入文件采用 UTF-8 编码,它会起作用。

输入文件如下:

FF FE 00 00 15 9E 02 00 0A 00 00 00 15 9E 00 00 0A 00 00 00

这是一个错误,还是只有我?

谢谢!

最佳答案

K,所以我觉得我想通了,它现在似乎可以工作了。事实证明,由于字符的代码是 15 9E 02 00 和 15 9E 00 00,因此无法将它们保存在一个单一的 UTF-16 char 中。因此,UTF16 改用这些代理对,其中有两个不同的字符充当一个“元素”。要获取元素,我们可以使用:

StringInfo.GetTextElementEnumerator(string fred);

这会返回一个包含代理项对的字符串。将其视为一个字符。

看这里:

http://msdn.microsoft.com/en-us/library/system.globalization.stringinfo.aspx

http://msdn.microsoft.com/en-us/library/system.globalization.textelementenumerator.gettextelement.aspx

希望对大家有帮助:D

关于c# - UTF32 和 C# 问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9987706/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com