我正在使用FileUpload服務器控件上載先前從MS Word保存(作爲網頁;過濾)的HTML文檔。字符集是windows-1252。 該文檔具有智能引號(捲曲)以及常規引號。它還具有一些空白區域(顯然),當深入查看除了正常TAB或SPACE以外的其他字符。FileUpload服務器控件和Unicode字符
在捕獲StreamReader中的文件內容時,這些特殊字符會被轉換爲問號。我假設它是因爲默認的encoidng是UTF-8而文件是Unicode。
我繼續使用Unicode編碼創建StreamReader,然後用正確的(我實際上在stackoverflow中找到的代碼)替換所有不需要的字符。這似乎工作....只是我不能將字符串轉換回UTF-8以顯示它在asp:文字。 代碼在那裏,它應該工作....但輸出(ConvertToASCII)是不可讀的。此外
protected void btnUpload_Click(object sender, EventArgs e)
{
StreamReader sreader;
if (uplSOWDoc.HasFile)
{
try
{
if (uplSOWDoc.PostedFile.ContentType == "text/html" || uplSOWDoc.PostedFile.ContentType == "text/plain")
{
sreader = new StreamReader(uplSOWDoc.FileContent, Encoding.Unicode);
string sowText = sreader.ReadToEnd();
sowLiteral.Text = ConvertToASCII(sowText);
lblUploadResults.Text = "File loaded successfully.";
}
else
lblUploadResults.Text = "Upload failed. Just text or html files are allowed.";
}
catch(Exception ex)
{
lblUploadResults.Text = ex.Message;
}
}
}
private string ConvertToASCII(string source)
{
if (source.IndexOf('\u2013') > -1) source = source.Replace('\u2013', '-');
if (source.IndexOf('\u2014') > -1) source = source.Replace('\u2014', '-');
if (source.IndexOf('\u2015') > -1) source = source.Replace('\u2015', '-');
if (source.IndexOf('\u2017') > -1) source = source.Replace('\u2017', '_');
if (source.IndexOf('\u2018') > -1) source = source.Replace('\u2018', '\'');
if (source.IndexOf('\u2019') > -1) source = source.Replace('\u2019', '\'');
if (source.IndexOf('\u201a') > -1) source = source.Replace('\u201a', ',');
if (source.IndexOf('\u201b') > -1) source = source.Replace('\u201b', '\'');
if (source.IndexOf('\u201c') > -1) source = source.Replace('\u201c', '\"');
if (source.IndexOf('\u201d') > -1) source = source.Replace('\u201d', '\"');
if (source.IndexOf('\u201e') > -1) source = source.Replace('\u201e', '\"');
if (source.IndexOf('\u2026') > -1) source = source.Replace("\u2026", "...");
if (source.IndexOf('\u2032') > -1) source = source.Replace('\u2032', '\'');
if (source.IndexOf('\u2033') > -1) source = source.Replace('\u2033', '\"');
byte[] sourceBytes = Encoding.Unicode.GetBytes(source);
byte[] targetBytes = Encoding.Convert(Encoding.Unicode, Encoding.ASCII, sourceBytes);
char[] asciiChars = new char[Encoding.ASCII.GetCharCount(targetBytes, 0, targetBytes.Length)];
Encoding.ASCII.GetChars(targetBytes, 0, targetBytes.Length, asciiChars, 0);
string result = new string(asciiChars);
return result;
}
,正如我以前說過,有一些更「透明」字,似乎相當於使Word文檔已編號壓痕,我不知道如何捕捉:
請看看下面他們的unicode價值取代他們....所以如果你有任何提示,請讓我知道。
非常感謝!
謝謝兄弟!!! ...做到了! – allendehl 2011-03-16 17:21:24
不客氣。 – 2011-03-16 17:33:47