2012-12-29 345 views
2

可能重複:
What’s the best option to display Unicode text (hebrew, etc.) in VB6如何在VB6中顯示Unicode字符?

什麼是顯示Unicode字符9646(BLACK豎長方形)在VB6的正確方法是什麼?

當我嘗試ChrW(9646)它顯示?

+0

問號是編碼的問題,你會得到他們當Unicode字符串轉換爲ANSI。發佈代碼片段。 –

+0

@ CJ7有很多*黑色的垂直矩形* ..所以最重要的是你想要做什麼**語言**這個'Unicode' *雜耍*?根據選擇的語言,你可以設置你的'Font.Charset'和'Font.Name'屬性。 – bonCodigo

回答

0

顯示問號的原因是該字符不存在於正在使用的字體中。您需要將字體設置爲one that supports BLACK VERTICAL RECTANGLE,例如Arial Unicode MS或Lucida Sans Unicode。

+2

缺失的字形會生成一個矩形,而不是問號。 –

5

這是一個tutorial探索。看看這篇文章的black vertical rectangle

假設的Unicode被接通時,發送以下字符串的窗口顯示:

Wchar_t mStr[] = {9646,0,0};

Reference。此代碼片段和引用更多地使用C++內聯。在這裏您將開啓/關閉在Visual C++ UNICODE使用以下步驟:

  1. 打開您VS2008/2010項目;

  2. 右鍵單擊解決方案資源管理器中的項目,然後單擊屬性;

  3. 選擇Configuration Properties-> General,選擇Character Set並更改current valueUse Multi-Byte Character Set。 (關閉)


好文章aboubt displaying UNICODE in VB

當您在Form中使用textbox控件時,請將Microsoft Forms 2.0 Object Library添加爲參考庫。該組件提供了Unicode支持的控件,例如:文本框,標籤,命令按鈕,列表框,組合框,複選框,單選按鈕,切換按鈕,圖像,tabstrip和多頁面控件。

用VB6的工作和顯示非美國ANSI字符需要3個主要的事情要明白:

  • 內部,VB6店字符串爲Unicode。
  • 當顯示字符串時,標準VB6文本框和標籤控件執行從Unicode到ANSI的隱式(和內部)轉換。
  • 標準VB6文本框和標籤控件根據您可以指定的字符編碼顯示ANSI字節。

Unicode-to-ANSI的轉換之後,VB6然後嘗試根據控制的Font.Charset屬性,其中,如果保持不變等於ANSI字符集來顯示字符數據。更改控件的Font.Charset將更改VB6解釋「ANSI」字節的方式。換句話說,你告訴VB6將字節視爲一些其他字符編碼而不是「ANSI」。

例如,考慮嘗試在English計算機上顯示Unicode Japanese字符串:您設置Font.Charset = 128(對於日語),但您的Unicode字符串顯示爲所有問號字符。這是因爲VB6首先將日文Unicode字符串轉換爲ANSI,即英文電腦的Windows-1252。日語字符在Windows-1252中不可表示。每個字符都無法轉換並被替換爲問號。例如在TextBox控件的屬性設置中選擇日語腳本與在運行時設置Font.Charset相同。

正如尤卡說Font播放顯示統一碼至關重要的作用給予了字體中的字符的可用性。正如漢斯所說,glyph不受支持的字體會產生一個矩形。所以你需要確保你選擇的Font有能力呈現字形。對於例如MS Sans Serif字體不呈現ƒ(拉丁字母小寫字母H,2字節Unicode值爲0x0192),所以你會看到一個薄實體矩形框在它的位置。但是在Windows上,有一個足夠寬的字符集來表示中國)極少數的字體..

在下面的代碼的字體名稱(沿字體字符集運行時間期間設置

字符集性能:

134  Simplified Chinese, gb2312 - Mainland China(PRC) and Singapore 
136  Traditional Chinese, big5 - Taiwan and Hong Kong 

代碼:

Sub changeToUniCodes() 
Dim strTxt2 As String  

UserForm1.TextBox2.Font.Charset = 134 '--CHINESESIMPLIFIED_CHARSET 
UserForm1.TextBox2.Font.Name = ChrW(&H5B8B) + ChrW(&H4F53) '-- 宋體 SimSun font 

UserForm1.TextBox2.Text = ChrW(37446) 
strTxt2 = UserForm1.TextBox2.Text 
'notice that ChrW(9246) produces a different character in Chinese 
UserForm1.TextBox2.Text = strTxt2 & " " & ChrW(9246) 
End Sub 

輸出在VBE IDE:你可以給它以V一試B6形式。

enter image description here

上述所有文字後,我發現這個MSDN文章。至少這是VB確認:D

+0

你是什麼意思「假設開啓了Unicode」?它是如何打開的? – CJ7

+0

@ CJ7請使用代碼段和評論查看更新後的答案。 :) 這麼晚纔回復很抱歉。 – bonCodigo

1

你需要的是使用「Unicode意識」控制。 VB6只帶有其中的一些,但在Vista和更高版本或XP(僅適用於Tablet Edition,除非使用該庫的非Ink redist版本),InkEdit控件可以執行此操作。

InkEdit1.Text = ChrW$(9646) 

注意它表示一個函數返回字符串,而不是一個變體與一個嵌入了$

InkEdit控件實際上是一個增強的RichTextBox,它支持墨水輸入以及在支持墨水的系統上輸入。它也是一個Unicode控件,並且支持Unicode屬性,如.Text

標準的MSHFlexGrid,DataGrid和其他一些控件也支持Unicode。

請參閱http://www.alanwood.net/unicode/geometric_shapes.html查看相關字符。你基本上可以忽略關於ANSI,字符集等的jibber-jabber。它在這裏是相關但不適用的。

▮ 9646 ▮ 25AE BLACK VERTICAL RECTANGLE