如何获得正确的字符串文本

本文关键字:字符串 文本 何获得 | 更新日期: 2023-09-27 18:06:29

我正在尝试获得由此字符串表示的正确unicode字符:

string originalString = "'u0605'u04c3'u5000'u0000'u5000'ufd00'u4400'ud500'u7600'ud300'u4f00'ubc00'u0c00'u2d00'u4000'ue400'u0e00'u7400'u4800'ub700'u1d00'u1300'ue900'u6000'u4c00'ufb00'u9900'u3900'ud900'u6700'uae00'ueb00'u8f00'u2800'u0200'ub300'u5c00'ufe00'u0100'u3d00'u9100'u3000'u0300'u1600'u0100'u7000'u6200'u8e00'u1d00'u8e00'u6200'ua900'u6300'uc800'u0900'ub700'ub000'u6000'ue400'u9200'u3f00'u9100'u8d00'uef00'u3600'u0100'u9e00'u0081";

如果我在cs文件中硬编码,我可以在调试模式下看到它显示正确的字符,但如果我在文件中写入了确切的字符串,并且我试图读取它,它显示的字符串就像它在文件中一样。

TextReader tr = new StreamReader("c:''test.txt");
string tmpString = tr.ReadLine();
tr.Close();
byte[] array = Encoding.Unicode.GetBytes(tmpString );
string finalResult = Encoding.Unicode.GetString(array);

如何使finalResult字符串具有正确的unicode字符?

提前感谢Goncalo

EDIT:已尝试放置

TextReader tr = new StreamReader("c:''test.txt",Encoding.Unicode);

如何获得正确的字符串文本

您的文件是否包含以下内容:

' u0605 ' u04c3 ' u5000 ' u0000 ' u5000 ' ufd00 ' u4400 ' ud500 ' u7600 ' ud300 ' u4f00' ubc00 ' u0c00 ' u2d00 ' u4000 ' ue400 ' u0e00 ' u7400 ' u4800 ' ub700 ' u1d00 ' u1300' ue900 ' u6000 ' u4c00 ' ufb00 ' u9900 ' u3900 ' ud900 ' u6700 ' uae00 ' ueb00 ' u8f00' u2800 ' u0200 ' ub300 ' u5c00 ' ufe00 ' u0100 ' u3d00 ' u9100 ' u3000 ' u0300 ' u1600' u0100 ' u7000 ' u6200 ' u8e00 ' u1d00 ' u8e00 ' u6200 ' ua900 ' u6300 ' uc800 ' u0900' ub700 ' ub000 ' u6000 ' ue400 ' u9200 ' u3f00 ' u9100 ' u8d00 ' uef00 ' u3600 ' u0100 ' u9e00 ' u0081

如果是,则需要将每个序列转换为对应的unicode字符

    string originalString = "'u0605'u04c3'u5000'u0000'u5000'ufd00'u4400'ud500'u7600'ud300'u4f00'ubc00'u0c00'u2d00'u4000'ue400'u0e00'u7400'u4800'ub700'u1d00'u1300'ue900'u6000'u4c00'ufb00'u9900'u3900'ud900'u6700'uae00'ueb00'u8f00'u2800'u0200'ub300'u5c00'ufe00'u0100'u3d00'u9100'u3000'u0300'u1600'u0100'u7000'u6200'u8e00'u1d00'u8e00'u6200'ua900'u6300'uc800'u0900'ub700'ub000'u6000'ue400'u9200'u3f00'u9100'u8d00'uef00'u3600'u0100'u9e00'u0081";
    string tmpString = "''u0605''u04c3''u5000''u0000''u5000''ufd00''u4400''ud500''u7600''ud300''u4f00''ubc00''u0c00''u2d00''u4000''ue400''u0e00''u7400''u4800''ub700''u1d00''u1300''ue900''u6000''u4c00''ufb00''u9900''u3900''ud900''u6700''uae00''ueb00''u8f00''u2800''u0200''ub300''u5c00''ufe00''u0100''u3d00''u9100''u3000''u0300''u1600''u0100''u7000''u6200''u8e00''u1d00''u8e00''u6200''ua900''u6300''uc800''u0900''ub700''ub000''u6000''ue400''u9200''u3f00''u9100''u8d00''uef00''u3600''u0100''u9e00''u0081";
    string finalResult = Regex.Replace(tmpString, @"''u(....)", match => ((char)int.Parse(match.Groups[1].Value, System.Globalization.NumberStyles.HexNumber)).ToString());

您可以在读取文件时使用Encoding作为参数

   TextReader tr = new StreamReader("c:''test.txt",Encoding.Unicode);
   string unicode_string = tr.ReadLine();

试试这样写:

TextReader streamReader = new StreamReader("c:''test.txt");
string input = streamReader.ReadLine();
string[] chars = input.Split(new char[] { '''', 'u' }, 
    StringSplitOptions.RemoveEmptyEntries);
streamReader.Close();
string answer = string.Empty;
foreach (string charachter in chars)
{
    byte byte1 = byte.Parse(string.Format("{0}{1}", 
        charachter[0], charachter[1]), NumberStyles.AllowHexSpecifier);
    byte byte2 = byte.Parse(string.Format("{0}{1}", 
        charachter[2], charachter[3]), NumberStyles.AllowHexSpecifier);
    answer += Encoding.Unicode.GetString(new byte[] { byte2, byte1 });
}