無論c++或c#都可以。
我已經試了一夜多,囧。
好餓,去吃飯了:)
這個字論壇顯示不出來,可以在這里查到 http://www.qqxiuzi.cn/bianma/zifuji.php
uj5u.com熱心網友回復:
0x2 B6 F3 是 3位元組? 是不是 utf8 ?uj5u.com熱心網友回復:
上面都明確寫了, GB碼沒這個字符控制臺要輸出這個字符, 控制臺的字體必須要能支持這個字體
去找下這種字體或者下載一個
uj5u.com熱心網友回復:
可以用這個: 鵩uj5u.com熱心網友回復:
這個字我能輸出。但是那個字就不行……
uj5u.com熱心網友回復:
用的就是NSimSun這個字體,NotePad里都能顯示的。
uj5u.com熱心網友回復:
#include <Windows.h>
#include <iostream>
using namespace std;
int main()
{
char szText[] = { 0xF9, 0x66, 0x0 };
wchar_t szBuf[16] = { 0 };
MultiByteToWideChar(CP_ACP, 0, szText, -1, szBuf, _countof(szBuf));
WriteConsole(GetStdHandle(STD_OUTPUT_HANDLE), szBuf, sizeof(wchar_t) * (wcslen(szBuf)), NULL, NULL);
return 0;
}
uj5u.com熱心網友回復:
這個字用什么輸入法打出來的,我嘗試轉成UNICODE,并不是3個位元組的
char szText[16] = { 0x98, 0x39, 0x98, 0x31, 0 };
WCHAR us[4] = { 0 };
int len = MultiByteToWideChar(54936, 0, szText, -1, us, _countof(us));
uj5u.com熱心網友回復:
看了樓主的問題,忽然想到孔乙己——茴字有四種寫法……如果專注于這些極其生冷而且不常用的知識上(這個字很可能有人終其一生都不曾見過,遑論使用了),進步會很慢uj5u.com熱心網友回復:
僅供參考:#pragma comment(lib,"user32")
#pragma comment(lib,"gdi32")
#include <conio.h>
#include <stdio.h>
#include <stdlib.h>
#include <windows.h>
extern "C" HWND WINAPI GetConsoleWindow();
void HideTheCursor() {
CONSOLE_CURSOR_INFO cciCursor;
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
if(GetConsoleCursorInfo(hStdOut, &cciCursor)) {
cciCursor.bVisible = FALSE;
SetConsoleCursorInfo(hStdOut, &cciCursor);
}
}
void ShowTheCursor() {
CONSOLE_CURSOR_INFO cciCursor;
HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE);
if(GetConsoleCursorInfo(hStdOut, &cciCursor)) {
cciCursor.bVisible = TRUE;
SetConsoleCursorInfo(hStdOut, &cciCursor);
}
}
int main() {
HWND hwnd;
HDC hdc;
HFONT hfont;
wchar_t wc[2];
system("color F0");
system("cls");
HideTheCursor();
hwnd = GetConsoleWindow();
hdc = GetDC(hwnd);
hfont = CreateFont(48,0,0,0,0,0,0,0,GB2312_CHARSET ,0,0,0,0,"宋體-方正超大字符集");
SelectObject(hdc,hfont);
wc[0]=0xD854u;
wc[1]=0xDC00u;
TextOutW(hdc,10,10,wc,2);
DeleteObject(hfont);
ReleaseDC(hwnd,hdc);
getch();
system("color 07");
system("cls");
ShowTheCursor();
return 0;
}
#if 0
代理項或代理項對是一對共同表示單個字符的 16 位 Unicode 編碼值。需要記住的關鍵一點是:
代理項對實際上是 32 位單個字符,不能再假定一個 16 位 Unicode 編碼值正好映射到一個字符。
使用代理項對
代理項對的第一個值是高代理項,包含介于 U+D800 到 U+DBFF 范圍內的 16 位代碼值。
該對的第二個值是低代理項,包含介于 U+DC00 到 U+DFFF 范圍內的值。通過使用代理項對,
16 位 Unicode 編碼系統可以對已由 Unicode 標準定義的一百多萬個其他字符 (220) 進行尋址。
在傳遞給 XmlTextWriter 方法的任何字串中都可以使用代理項字符。不過,代理項字符在撰寫的
XML 中應該有效。例如,萬維網聯合會 (W3C) 建議不允許在元素或屬性的名稱中使用代理項字符。
如果字串包含無效的代理項對,則引發例外。
另外,可以使用 WriteSurrogateCharEntity 寫出與代理項對相對應的字符物體。字符物體以十六
進制格式寫出,并用以下公式生成:
(highChar -0xD800) * 0x400 + (lowChar -0xDC00) + 0x10000
如果字串包含無效的代理項對,則引發例外。下面的示例顯示將代理項對作為輸入的 WriteSurrogateCharEntity 方法。
C#復制
// The following line writes 𐀀.
WriteSurrogateCharEntity ('\uDC00', '\uD800');
下面的示例生成一個代理項對檔案,將其加載到 XmlReader 中,并用新的檔案名保存檔案。
然后,原始檔案和新檔案被加載回應用程式的 XML 檔案物件模型 (DOM) 結構中以進行比較。
C#復制
char lowChar, highChar;
char [] charArray = new char[10];
FileStream targetFile = new FileStream("SurrogatePair.xml",
FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
lowChar = Convert.ToChar(0xDC00);
highChar = Convert.ToChar(0xD800);
XmlTextWriter tw = new XmlTextWriter(targetFile, null);
tw.Formatting = Formatting.Indented;
tw.WriteStartElement("root");
tw.WriteStartAttribute("test", null);
tw.WriteSurrogateCharEntity(lowChar, highChar);
lowChar = Convert.ToChar(0xDC01);
highChar = Convert.ToChar(0xD801);
tw.WriteSurrogateCharEntity(lowChar, highChar);
lowChar = Convert.ToChar(0xDFFF);
highChar = Convert.ToChar(0xDBFF);
tw.WriteSurrogateCharEntity(lowChar, highChar);
// Add 10 random surrogate pairs.
// As Unicode, the high bytes are in lower
// memory; for example, word 6A21 as 21 6A.
// The high or low is in the logical sense.
Random random = new Random();
for (int i = 0; i < 10; ++i) {
lowChar = Convert.ToChar(random.Next(0xDC00, 0xE000));
highChar = Convert.ToChar(random.Next(0xD800, 0xDC00));
charArray[i] = highChar;
charArray[++i] = lowChar;
}
tw.WriteChars(charArray, 0, charArray.Length);
for (int i = 0; i < 10; ++i) {
lowChar = Convert.ToChar(random.Next(0xDC00, 0xE000));
highChar = Convert.ToChar(random.Next(0xD800, 0xDC00));
tw.WriteSurrogateCharEntity(lowChar, highChar);
}
tw.WriteEndAttribute();
tw.WriteEndElement();
tw.Flush();
tw.Close();
XmlTextReader r = new XmlTextReader("SurrogatePair.xml");
r.Read();
r.MoveToFirstAttribute();
targetFile = new FileStream("SurrogatePairFromReader.xml",
FileMode.Create, FileAccess.ReadWrite, FileShare.ReadWrite);
tw = new XmlTextWriter(targetFile, null);
tw.Formatting = Formatting.Indented;
tw.WriteStartElement("root");
tw.WriteStartAttribute("test", null);
tw.WriteString(r.Value);
tw.WriteEndAttribute();
tw.WriteEndElement();
tw.Flush();
tw.Close();
// Load both result files into the DOM and compare.
XmlDocument doc1 = new XmlDocument();
XmlDocument doc2 = new XmlDocument();
doc1.Load("SurrogatePair.xml");
doc2.Load("SurrogatePairFromReader.xml");
if (doc1.InnerXml != doc2.InnerXml) {
Console.WriteLine("Surrogate Pair test case failed");
}
在使用 WriteChars 方法(一次寫出一個緩沖區的資料)寫出時,輸入中的代理項對可能
會在一個緩沖區內被意外拆分。由于代理項值是定義完善的,如果 WriteChars 遇到來自
較低范圍或者較高范圍的 Unicode 值,它將該值標識為代理項對的一半。當遇到
WriteChars 將導致從拆分代理項對的緩沖區寫入的情況時,將引發例外。使用
IsHighSurrogate 方法檢查緩沖區是否以高代理項字符結束。如果緩沖區中的最后一個
字符不是高代理項,可以將該緩沖區傳遞給 WriteChars 方法。
請參見
概念
使用 XmlTextWriter 創建格式正確的 XML
XmlTextWriter 的 XML 輸出格式設定
XmlTextWriter 的命名空間功能
#endif
uj5u.com熱心網友回復:
專案中確實用到了這個字。只是偶爾打雞血想研究一下,呵呵。
看到幾位貼出了代碼,我會去試試:)
轉載請註明出處,本文鏈接:https://www.uj5u.com/gongcheng/105231.html
標籤:基礎類
