我的位图文本文件中的所有字符都是中文

Posted

技术标签:

【中文标题】我的位图文本文件中的所有字符都是中文【英文标题】:All Characters in my Bitmap Textfile are in Chinese 【发布时间】:2021-04-15 04:15:25 【问题描述】:

所以我目前正在开发一个从 .fbm 文件中提取材料的程序。在 ASCII fbm 文件中,要提取的数据如下所示: /9j/4Sb7RXhpZgAATU0AKgAAAAgADAEAAAMAAAABEAAAAAEBAAMAAAABEAAAAAECAAMAAAADAAAAngEGAAMAAAABAAIAAAESAAMAAAABAAEAAAEVAAMAAAABAAMAAAEaAAUAAAABAAAApAEbAAUAAAABAAAArAEoAAMAAAABAAIAAAExAAIAAAAiAAAAtAEyAAIAAAAUAAAA1odpAAQAAAABAAAA7AAAASQACAAIAAgACvyAAAAnEAAK/IAAACcQQWRvYmUgUGhvdG9zaG9wIENDIDIwMTcgKFdpbmRvd3MpADIwMTk6MDc6MD ...

在 fbm 文件中有几组这些,每组都用引号和逗号分隔。现在,当我将文件中的第一个字符串转换为 jpg 时,使用以下命令:

                        //Convert ASCII data to binary
                        string asciiFileData = "";
                        StreamReader binaryDataReader = File.OpenText(Path.Combine(inputDirectory, convertedFBX + iterator.ToString() + ".txt"));
                        while (!binaryDataReader.EndOfStream)
                        
                            var lineData = binaryDataReader.ReadLine();
                            if (String.IsNullOrEmpty(lineData)) continue;
                            asciiFileData += lineData;
                        
                        string[] imageStrings = asciiFileData.Split(',');
                        List<byte[]> imageList = new List<byte[]>();
                        foreach (string imageString in imageStrings)
                        
                            if(imageString.Length > 10)//A way of checking if there's actual data for the file to save
                                imageList.Add(Convert.FromBase64String(imageString.Trim().Replace(",", "").Replace("\"", "")));
                        
                        //Save images
                        int iterator2 = 1;
                        foreach(byte[] image in imageList)
                        
                            File.WriteAllBytes(Path.Combine(inputDirectory, convertedFBX + iterator.ToString() + iterator2++ + ".jpg"), image);
                        

第一个字符串创建材料的正确 jpg。当我在一个文本文件中打开它时,它是通常奇怪的外星人字符(不是很肯定那些所谓的)。但是,第一个之后的jpgs无法打开。我为他们打开了文本文件,所有的字符都是中文的!为什么会发生这种情况?这是什么意思,应该是这样吗?提前感谢您的回答!

【问题讨论】:

devblogs.microsoft.com/oldnewthing/20140930-00/?p=43953。也就是说,不要强迫可怜的文本编辑器将二进制内容解释为某种编码的文本。 (半相关,你应该会看到joelonsoftware.com/articles/Unicode.html.) StreamReader 仅用于文本内容。对于二进制数据,您应该使用BinaryReader 这是很棒的信息,@GSerg!您介意将其放入答案中,以便我可以将此问题标记为已回答吗? @silkfire 原来的内容是Base64,其实是对的。 "但是,第一个之后的 jpgs 无法打开。"在hex 编辑器 中打开它们并查看jpeg 文件的开头supposed 的样子。然后你就可以看到你的后续文件有什么问题了。 【参考方案1】:

该资源在 cmets 中被提及;但是,我的答案是在https://devblogs.microsoft.com/oldnewthing/20140930-00/?p=43953 找到的。本质上,当您尝试强制二进制内容成为某种特定的编码时,就会发生此错误。

【讨论】:

以上是关于我的位图文本文件中的所有字符都是中文的主要内容,如果未能解决你的问题,请参考以下文章

如何处理文本文件中两个单词之间没有被我的程序读取为空格的大间隙?

Java:拆分字符串并将它们放入文本区域的

导入文本查询字母单词个数

如何找到特定列之间的匹配?

在c语言中怎样打开一个文本文档

打开多行文本文件并仅读取其中的特定行。并将值发送到文本框