You need to use the correct encoding for the file. Do you know what encoding is? It could be UTF-16, otherwise Encoding.Unicode, or maybe something like Big5. In fact, you should try to find out for sure, not guessing.
As mentioned in the leppie answer, the problem may also be the capabilities of the console. To find out for sure, print the Unicode character strings as numbers. See the article on debugging errors in Unicode for more information and a useful method for flushing the contents of a string.
I would also avoid using the code you are currently using to read the file line by line. Instead, use something like:
using (StreamReader sr = new StreamReader(path, appropriateEncoding)) { string line; while ( (line = sr.ReadLine()) != null) {
Calling Peek () requires that the stream can search, which may be true for files, but not for all streams. Also look at File.ReadAllText and File.ReadAllLines , if that is what you want to do - they are very convenient utility methods.
source share