C# 将多行转换成一行,然后将一行转换成多行内容不能改变

将多行字符串转换成一行,然后将这一行还原成原来的字符串(多行),

转换后的多行和转换前的内容必须完全相同

a测试文本1
多行文本

AAA
BBB
CCC
DDD
EEE

b转换成单行AAA BBB CCC DDD EEE 全在一行上

c然后把c 单行转换和a这个多行一样 内容必须一样

详细

因为用INI保存信息

INIFILES 保存信息格式是一个字符对应一个值

[config]
a = 这是文本的内容
b = 这是文本的内容

所以对于多行文本像 文本为多行的textBox1.Text,就只能保存第一行

1 现在要保存 所有textBox1.Text里面的内容到一行
2 读取这行的内容的时候把它转换成 textBox1.Text原来的样子,即多行的样子

之间我是用Replace替换的感觉非常完美

 //多行变单行
textBox1.Text = textBox1.Text.Replace("\n", @"\r\n");

//单行变多行
 textBox1.Text = textBox1.Text.Replace(@"\r\n", "\n");

但如果文本中包含\r\n则就转换过来的内容就不一样了
以下是测试文本
AAA\r\nBBB\r\nCCC\r\nDDD\r\nEEE
AAA\r\nBBB\r\nCCC\r\nDDD\r\nEEE
AAA\r\nBBB\r\nCCC\r\nDDD\r\nEEE

用替换的方法字符串中的\r\n消失了

将\n修改为\r\n

textBox1.Text = textBox1.Text.Replace("\r\n", @"\r\n");

textBox1.Text = textBox1.Text.Replace(@"\r\n", "\r\n");

不要使用\n或者\r\n这种硬文本,因为有的地方是\n就行,有的必须\r\n,还有别的其他地方又不一样;使用Environment.Newline,会自动再不同地方生成对应的换行符号

不用替换的方式要牺牲TXT的可读性


 //多行变单行
textBox1.Text =textBox1.Text.ToHexString();

//单行变多行
 textBox1.Text = textBox1.Text.FromHexString();


 public static string ToHexString(this string str)
        {
            string result = "";

            foreach (byte i in Encoding.UTF8.GetBytes(str)) {
                result += i.ToString("x2");
            }

            return result;
        }

public static string FromHexString(this string str) {

            byte[] result = new byte[str.Length / 2];

            for (int i = 0; i < str.Length/2; i++) {
                result[i] = Convert.ToByte(str.Substring(i * 2, 2), 16);
            }

            return Encoding.UTF8.GetString(result);
        }