我正在編寫一個小工具,對編碼有一些普遍的困惑。使用來自Textbox的ASCII/UTF8數據以ASCII格式編寫P6 .ppm。編碼混淆?
首先,我很抱歉下面的代碼是一個小問題,但是我寫的代碼到目前爲止,它是最接近實際工作的代碼。
如果我使用下面的代碼:
/*create file*/
FileStream fileS = new FileStream(filename + ".ppm", FileMode.Create, FileAccess.ReadWrite, FileShare.None, 8, FileOptions.None);
/*create a binary writer*/
BinaryWriter bWriter = new BinaryWriter(fileS, Encoding.ASCII);
/*write ppm header*/
string buffer = "P6 ";
bWriter.Write(buffer.ToCharArray(), 0, buffer.Length);
buffer = width.ToString() + " ";
bWriter.Write(buffer.ToCharArray(), 0, buffer.Length);
buffer = height.ToString() + " ";
bWriter.Write(buffer.ToCharArray(), 0, buffer.Length);
buffer = "255 ";
bWriter.Write(buffer.ToCharArray(), 0, buffer.Length);
/*write data out*/
byte[] messageByte = Encoding.UTF8.GetBytes(ppmDataBox.Text);
bWriter.Write(messageByte, 0, messageByte.Length);
/*close writer and bWriter*/
bWriter.Close();
fileS.Close();
那我得到的是保存在UTF-8格式的文件,如果我打開該文件,並將其重新保存爲ASCII我得到的PPM我期待。
但是如果我更改線路:
byte[] messageByte = Encoding.UTF8.GetBytes(ppmDataBox.Text);
到
byte[] messageByte = Encoding.ASCII.GetBytes(ppmDataBox.Text);
然後我得到保存在ASCII格式的文件,但該文件是錯誤的,顏色是錯誤的,基本數據在文件中與文本框中的數據不匹配。
我假設文本框是UTF-8,我粘貼到它的數據實際上是ASCII格式/字符,我首先需要將該ASCII轉換爲其對應的UTF-8 ...(也可以是這些字符的UTF-8版本)。然而,如果我完全誠實,這是我進入編碼世界的第一次冒險,我完全無能爲力。所以請讓我知道我是否在講垃圾。
這裏的是我粘貼到文本框中的數據類型的樣本:
ÿÿ ÿÿ ÿÿ ÿÿ aa aa aa ÿÿ ÿÿ ÿÿ ÿÿ ÿÿ ÿÿ ÿÿ ÿÿ ÿÿ ÿÿ ÿ
它意味着是黃色與黑色小方塊無處不在,但它出來的綠色,並在文件以ASCII格式創建數據最終看起來像這樣:
?? ?? ?? ?? aa aa aa ?? ?? ?? ??
此代碼非常完美,並且也很寫得很好我想補充:)。我改變的唯一的事情是: 我添加了bw.close()和fs.close(), 檢查了dir字符串didnt已經存在並且不是空的。 感謝您提供代碼頁的鏈接和您的解釋,這使得現在更有意義!我也感覺這個工具會從編碼選擇中受益。 再次感謝您花時間回答我的問題,並通過撰寫一些非常好的C#代碼來加倍努力 – chrispepper1989