我想從C#控制檯讀取unicode字符串,例如着想讀unicode的,讓他USET一個:從控制檯
C:\ SVN \D³ebugger的\ src \виталик\的Program.cs
起初我只是試圖Console.ReadLine()
這回我c:\SVN\D3ebugger\src\???????\Program.cs
我已經盡力了Console.InputEncoding設置爲UTF-8,像這樣Console.InputEncoding = Encoding.UTF8
但回到我c:\SVN\D³ebugger\src\???????\Program.cs
,基本上打亂字符串的西里爾部分。
所以隨機磕磕絆絆我試圖設置這樣的編碼,Console.InputEncoding = Encoding.GetEncoding(1251);
其中返回c:\SVN\D?ebugger\src\виталик\Program.cs
,這次會破壞³字符。
在這一點上,似乎通過切換encodings爲InputStream我一次只能得到一種語言。
我也試着去本地,做這樣的事情:
// Code
public static string ReadLine()
{
const uint nNumberOfCharsToRead = 1024;
StringBuilder buffer = new StringBuilder();
uint charsRead = 0;
bool result = ReadConsoleW(GetStdHandle(STD_INPUT_HANDLE), buffer, nNumberOfCharsToRead, out charsRead, (IntPtr)0);
// Return the input minus the newline character
if (result && charsRead > 1) return buffer.ToString(0, (int)charsRead - 1);
return string.Empty;
}
// Extern definitions
[DllImport("Kernel32.DLL", ExactSpelling = true)]
internal static extern IntPtr GetStdHandle(int nStdHandle);
[DllImport("kernel32.dll", CharSet = CharSet.Unicode, ExactSpelling = true)]
static extern bool ReadConsoleW(IntPtr hConsoleInput, [Out] StringBuilder lpBuffer,
uint nNumberOfCharsToRead, out uint lpNumberOfCharsRead, IntPtr lpReserved);
,這是工作的罰款對於非Unicode字符串,但是當我試圖使它閱讀我的樣本串,應用程序崩潰。我試圖告訴Visual Studio打破所有異常(包括本機異常),但應用程序仍會崩潰。
我還發現this微軟Connect中的開放性錯誤似乎是說現在從控制檯的InputStream中讀取Unicode是不可能的。
即使與我的問題沒有嚴格關係,值得注意的是,如果Console.OutputEncoding設置爲UTF8,Console.WriteLine能夠打印此字符串就好了。
謝謝!
更新1
我要尋找一個解決方案,.NET 3.5
更新2
與我用全部原生代碼更新。
是否有可能/可以接受的,而不是使用控制檯命名管道? – Goyuix 2012-03-06 02:18:44
如果我沒有找到解決方案,那麼這可能是我會做... – VitalyB 2012-03-06 09:38:20