【发布时间】:2013-07-06 14:27:36
【问题描述】:
我编写了一个快速而简单的实用程序来解析文本文件,但在某些情况下它会写出一个“�”字符。我的实用程序从包含以下格式的“记录”的 .txt 文件中读取:
Biography
Title:George F. Kennan: An American Life
Author:John Lewis Gaddis
Kindle: B0054TVO1G
Hardcover: B007R93I1U
Paperback: 0143122150
Image link: <a href="https://rads.stackoverflow.com/amzn/click/com/B0054TVO1G" rel="nofollow noreferrer"><img src="http://images.amazon.com/images/P/B0054TVO1G.01.MZZZZZZZ.jpg" alt="Book Cover" /></a>
...并将其中的行写入 CSV 文件,例如:
Biography,"George F. Kennan: An American Life","John Lewis Gaddis",B0054TVO1G,B007R93I1U,0143122150,<a href="https://rads.stackoverflow.com/amzn/click/com/B0054TVO1G" rel="nofollow noreferrer"><img src="http://images.amazon.com/images/P/B0054TVO1G.01.MZZZZZZZ.jpg" alt="Book Cover" /></a>
...但在某些情况下,如前所述,那个奇怪的字符会将自己附加到作者的名字上。在发生这种情况的大多数情况下,它似乎是 .txt 文件中的空格字符。在将作者姓名写入 CSV 文件之前,我会对其进行修整,因此它显然不会被视为空格。
当我用这些字符保存文本文件时,我收到关于非 unicode 字符等的消息。
这可能是什么原因?更好的是,如何通过搜索和替换操作删除它们?在记事本中,找不到它们,所以我必须一个一个地删除它们。
在 .txt 文件中之前,此数据位于 Open Office/.odt 文件中,如果这对任何人都有意义的话。
顺便说一句,我不知道“stackoverflow”是如何进入上面的 href 的;不是我粘贴的原文...
更新
我我很好奇这个角色是如何进入我的文件的。我肯定没有(故意)把它放在那里,就像我在上面的 URL 中添加了“stackoverflow”一样。会不会是对 Environment.Newline 的调用会添加它?
这是我的过程:
1) Copy and paste info from the interwebs into an Open Office/.odt file
2) Copy and past that into a text (Notepad) file
3) Open that text file programmatically and loop through it, writing to a new "csv"/.txt file.
更新 2
我真傻 - 我所要做的就是保存文件(不会保存那些奇怪的字符),然后再次打开它。 IOW,当我今天(在家,下班后)打开它时,那些已经不见了。
更新 3
我写得太早了——它用问号代替了奇怪的字符(一个“正常”的,而不是一个程式化的)。
【问题讨论】:
-
文本文件的编码是什么?如果您以不同的编码读取它,可能无法识别某些字符
-
它只是一个普通的旧文本文件。我是这样读的: using (StreamReader stromLeser = new StreamReader(fileName)) { string rawLine; while ((rawLine = stromLeser.ReadLine()) != null) { if (!string.IsNullOrEmpty(rawLine)) { rawLines.Add(rawLine.Trim()); } } }
-
没有“纯旧文本文件”之类的东西......joelonsoftware.com/articles/Unicode.html
-
我的意思是它可以用 UTF-8 编码,如果你想让它以默认编码(可以是 ANSI)读取它,你可能会错过一些字符。
-
我所说的“普通旧文本文件”是一个记事本文件,我从中粘贴了 .odt 文件中的内容。我必须在我的实用程序中做什么来适应这种情况?
标签: c# parsing text-parsing odt non-unicode