2008-11-20 157 views
4

是的,我們正在談論ASCII碼。我的appologies我不是這裏的德爾福開發。如何將unicode字符轉換爲delphi 7中的ascii代碼?

+0

任何特定的德爾福版本? – 2008-11-20 12:48:02

+0

標題並沒有真正說出這一切!我不確定你是否理解unicode,否則我誤解了你的問題。 – Steve 2008-11-20 13:09:47

+0

我們已經知道我們正在談論ASCII碼,因爲這就是你在標題中所說的。但是你沒有說過你的意思是什麼樣的轉換。你能舉出一些例子和你期望他們產出的輸出嗎?也許你應該讓Delphi開發者提出這個問題。 – 2008-11-21 02:58:19

回答

1

這取決於您對轉換的定義。如果您想將127個最低字符映射到與Unicode相同的字符,則可以使用顯式強制轉換。但是如果字符串包含更高的字符,這會造成垃圾。

如果你想映射像ë - > e和û - > u,你可以編寫自己的代碼。但請注意,總是有不能轉換的字符。

+0

你不想寫你自己的代碼來做字符集轉換! – lkessler 2008-11-21 01:05:27

1

舉個例子,字母A在Unicode中當U + 0041和ANSI剛剛41如此轉換,這將是非常簡單的表示,但你必須找出Unicode字符的編碼方式。最常見的是UTF-16和UTF-8。 UTF 16基本上每個字符有兩個字節,但即使這樣也是過分簡單化,因爲字符可能有更多字節。 UTF-8聽起來好像它意味着每個字符1個字節,但可以是2或3個。更復雜的是,UTF-16可以是小端或大端。 (U + 0041或U + 4100)。

如果你的問題是沒有意義的是,如果你想例如轉換阿拉伯字母AIN U + 0639爲ANSI上的英語語言環境。你不能。

1

「ASCII」是字符數的具體映射的名字,但有些人說「ASCII碼」時,他們並不真正意味着ASCII可言;他們只是想要一個字符的數字值,無論這個映射在當時有效。這個描述是否適用於你?

如果是這樣,那麼你可以使用Ord標準函數來獲取的,你擁有的任何Unicode字符的Unicode代碼點值。

var 
    wc: WideChar; 
    ws: WideString; 
    x: Word; 

x := Ord(wc); 
x := Ord(ws[1]); 

如果你真的指的是ASCII碼,那麼你必須更具體地說明你想要什麼樣的轉換。

1

您可以使用http://swissdelphicenter.ch/en/showcode.php?id=1692的功能
它使用指定的代碼頁將Unicode字符串轉換爲Ansi字符串。
如果要使用默認的系統代碼頁(在區域選項定義非Unicode代碼頁)轉換,你可以這樣做只是像以下:

var 
    ws: widestring; 
    s: string; 
begin 
    s:=string(ws) 
3

讓我們得到了一些東西直。字符集(字符集)和字符編碼是兩個相關但不同的概念。字符集是一些抽象的字符列表,其中包含某種相關的整數字符代碼。然後是字符編碼,它基本上是描述字符如何以字節表示的算法。

ASCII充當字符集和編碼。它使用7位表示128個字符(可打印94個)。另一方面,Unicode是一個字符集,表示1,114,112個碼點。有幾種編碼可以表示Unicode字符串,但最值得注意的是UTF-8,UTF-16,UTF-16LE和UTF-32。換句話說,一個Unicode字符可以用不同的方式表示,具體取決於編碼。

如何將unicode字符轉換爲delphi 7中的ascii代碼?

我認爲這個問題可以用兩種方式解釋。

  1. 我在一些只包含ASCII可打印字符的編碼中有一個Unicode字符串。如何將字符串轉換爲ASCII編碼的字節數組?

  2. 我有一個Unicode字符串在一些編碼,還包括非ASCII可打印的字符,如中文字符。如何將字符串編碼爲ASCII編碼而不會丟失信息,然後將其解碼回原始Unicode字符串?

如果你指的是第一,你可以像奧斯曼的話說加載Unicode字符串到WideString的和做

var 
    original: WideString; 
    s: AnsiString; 
begin 
    s := AnsiString(original); 

如果你指的是第二,你需要一個通用的編碼算法像Base64編碼。您可以使用David Barton的DCPcrypt v2 Beta 3中包含的DCPBase64.pas

相關問題