ASt*_*oob 8 c# mono encoding gedit utf-32
所以我遇到了一些字符编码问题.当我将以下两个字符放入UTF32编码的文本文件中时:
?
Run Code Online (Sandbox Code Playgroud)
然后在它们上运行此代码:
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();
Run Code Online (Sandbox Code Playgroud)
我明白了:
?
?
Run Code Online (Sandbox Code Playgroud)
(相同的字符两次,即输入文件!=输出)
一些可能有用的东西:第一个字符的十六进制:
15 9E 02 00
而对于第二个:
15 9E 00 00
我正在使用gedit创建文本文件,使用单声道用于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);
Run Code Online (Sandbox Code Playgroud)
这会返回一个包含代理项对的字符串.把它当成一个角色.
看这里:
http://msdn.microsoft.com/en-us/library/system.globalization.stringinfo.aspx
希望它可以帮到某人:D
| 归档时间: |
|
| 查看次数: |
5099 次 |
| 最近记录: |