我想翻譯解析一個RTF格式的消息(我需要保留格式標籤,所以我不能使用這個技巧,你只需將其粘貼到RichTextBox
並獲取.PlainText
)在rtf標記中檢測多字節和中文字符
就拿RTF代碼粘貼直接到寫字板串a基bমূcΟιd
:
{\rtf1\ansi\ansicpg1252\deff0\deflang2057{\fonttbl{\f0\fnil\fcharset0 Calibri;}{\f1\fswiss\fcharset128 MS PGothic;}{\f2\fnil\fcharset1 Shonar Bangla;}{\f3\fswiss\fcharset161{\*\fname Arial;}Arial Greek;}}
{\*\generator Msftedit 5.41.21.2510;}\viewkind4\uc1\pard\sa200\sl276\slmult1\lang9\f0\fs22 a\f1\fs24\'8a\'ee\f0\fs22 b\f2\fs24\u2478?\u2498?\f0\fs22 c\f3\fs24\'cf\'e9\f0\fs22 d\par
}
這是很難做出來的,如果你沒有很多工作要做,RTF。因此,這裏是我在看
\'8a\'ee\f0\fs22 b\f2\fs24\u2478?\u2498?\f0\fs22 c\f3\fs24\'cf\'e9
通知的基
(u+57FA
)是\'8a\'ee
但মূ
,這實際上是兩個字符ম
(\u2478?
)和ূ
(\u2498?
)位,是\u2478?\u2498?
這是很好的,但Οι
這是兩個獨立的字符Ο
和ι
是\'cf\'e9
。
有沒有一種方法來確定,如果我在尋找的東西,應該是一個字符,如基
= \'bb\'f9
或兩個字符Ο
和ι
= \'cf\'e9
?
我在想,也許\lang
是它,但事實並非如此,因爲\lang
從第一次設置時不會改變。我已經爲字體中不同的Charset
值編寫了不同的代碼頁,但它似乎並沒有告訴我任何有關是否應該將兩個Unicode引用相鄰的字符視爲雙字節字符。
我怎麼知道我正在看的字符應該是雙字節(或多字節)還是單字節?
如果我知道fcharset編碼如何使用它來確定我使用單字節還是雙字節字符?或者是否存在\ 8 \ f或類似的範圍,我可以將其與編碼結合使用以決定是否需要讀取下一個字符? – Seph
是的,有一系列的前導字節表示多字節序列,並且該範圍對於每個多字節編碼都不相同。請參閱[這裏的fcharsetN列表](http://latex2rtf.sourceforge.net/rtfspec_6.html),然後查找各個代碼頁。例如[cp932](http://msdn.microsoft.com/en-gb/goglobal/cc305152)(≈Shift-JIS)。通過一次讀取一段文本中的所有字節,然後使用環境中可用的任何現有編碼處理(例如,.NET中的編碼)轉換爲字符,而不是試圖讀取一個字節逐字節的基礎。 – bobince
我希望我可以不止一次地投票,我的問題是如何以字節爲單位重新組裝字符,我更改爲讀取所有字節,然後使用.NET Encoding轉換它們完美的作品! – Seph