如何在Turbo C ++中使用Unicode

如何在Turbo C ++中使用Unicode符号?我特别想要上标和下标符号。

我必须使用过时的turbo c ++,因为这是我学校提供的东西,我必须在项目中使用它。

sylarchen1314 回答:如何在Turbo C ++中使用Unicode

如前所述,turbo C ++无法直接访问unicode。它很可能太旧了,甚至无法生成可以使用系统库(DLL)的代码,因此-即使通过手工重新创建头文件,您也无法调用wprintf到目前为止,即使在带有Windows的奥术cmd终端上,也可以输出正确的unicode。

但是,cmd终端中使用的默认字符编码支持一些非ASCII字符-确切地取决于您操作系统的语言(语言环境)配置。 (例如,对于西欧语言,通常是"cp-852"-如果Windows是英语,则可以是CP-850。

所有这些旧的8位charmap编码都不会包含所有十位数字作为上标-但是您可能会有一些可用的字符(例如,cp 850具有“¹,²,³”功能)。

因此,您可以检查终端代码页,并在Wikipedia上查看其代码-您可以在Windows终端上使用chcp命令检查并更改当前代码页。如果您的Windows版本支持涵盖所有可打印unicode字符的“ utf-8”,则必须在终端上键入chcp 65001。 (我不知道哪个Windows版本支持该功能,也不知道您使用的是哪个版本)。

一旦做到这一点,您所要做的就是使用字符串中字符的“ \ xHH”编码来打印utf-8中上标数字的字节序列。 C ++会允许它,否则`printf(“%c%c”,0xHH,0xHH)会起作用

为方便起见,我为超级脚本附加了代码点和utf-8编码:

0x00B2: SUPERSCRIPT TWO - ² - utf-8 seq: b'\xc2\xb2'
0x00B3: SUPERSCRIPT THREE - ³ - utf-8 seq: b'\xc2\xb3'
0x00B9: SUPERSCRIPT ONE - ¹ - utf-8 seq: b'\xc2\xb9'
0x0670: ARABIC LETTER SUPERSCRIPT ALEF - ٰ - utf-8 seq: b'\xd9\xb0'
0x0711: SYRIAC LETTER SUPERSCRIPT ALAPH - ܑ - utf-8 seq: b'\xdc\x91'
0x2070: SUPERSCRIPT ZERO - ⁰ - utf-8 seq: b'\xe2\x81\xb0'
0x2071: SUPERSCRIPT LATIN SMALL LETTER I - ⁱ - utf-8 seq: b'\xe2\x81\xb1'
0x2074: SUPERSCRIPT FOUR - ⁴ - utf-8 seq: b'\xe2\x81\xb4'
0x2075: SUPERSCRIPT FIVE - ⁵ - utf-8 seq: b'\xe2\x81\xb5'
0x2076: SUPERSCRIPT SIX - ⁶ - utf-8 seq: b'\xe2\x81\xb6'
0x2077: SUPERSCRIPT SEVEN - ⁷ - utf-8 seq: b'\xe2\x81\xb7'
0x2078: SUPERSCRIPT EIGHT - ⁸ - utf-8 seq: b'\xe2\x81\xb8'
0x2079: SUPERSCRIPT NINE - ⁹ - utf-8 seq: b'\xe2\x81\xb9'
0x207A: SUPERSCRIPT PLUS SIGN - ⁺ - utf-8 seq: b'\xe2\x81\xba'
0x207B: SUPERSCRIPT MINUS - ⁻ - utf-8 seq: b'\xe2\x81\xbb'
0x207C: SUPERSCRIPT EQUALS SIGN - ⁼ - utf-8 seq: b'\xe2\x81\xbc'
0x207D: SUPERSCRIPT LEFT PARENTHESIS - ⁽ - utf-8 seq: b'\xe2\x81\xbd'
0x207E: SUPERSCRIPT RIGHT PARENTHESIS - ⁾ - utf-8 seq: b'\xe2\x81\xbe'
0x207F: SUPERSCRIPT LATIN SMALL LETTER N - ⁿ - utf-8 seq: b'\xe2\x81\xbf'
0xFC5B: ARABIC LIGATURE THAL WITH SUPERSCRIPT ALEF ISOLATED FORM - ﱛ - utf-8 seq: b'\xef\xb1\x9b'
0xFC5C: ARABIC LIGATURE REH WITH SUPERSCRIPT ALEF ISOLATED FORM - ﱜ - utf-8 seq: b'\xef\xb1\x9c'
0xFC5D: ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF ISOLATED FORM - ﱝ - utf-8 seq: b'\xef\xb1\x9d'
0xFC63: ARABIC LIGATURE SHADDA WITH SUPERSCRIPT ALEF ISOLATED FORM - ﱣ - utf-8 seq: b'\xef\xb1\xa3'
0xFC90: ARABIC LIGATURE ALEF MAKSURA WITH SUPERSCRIPT ALEF FINAL FORM - ﲐ - utf-8 seq: b'\xef\xb2\x90'
0xFCD9: ARABIC LIGATURE HEH WITH SUPERSCRIPT ALEF INITIAL FORM - ﳙ - utf-8 seq: b'\xef\xb3\x99'

(这是通过以下Python代码段以交互模式生成的:)

import unicodedata
for i in range(0,0x10ffff):
    char = chr(i)
    try:
        name = unicodedata.name(char)
    except ValueError:
        pass
    if "SUPERSCRIPT" not in name:
        continue
    print(f"0x{i:04X}: {name} - {char} - utf-8 seq: {char.encode('utf-8')}")

,

旧的 Turbo C ++ (不是BDS2006 Turbo C ++)适用于 MS-DOS 16位目标,因此它根本不支持UNICODE也不支持TTF字体等。为了使UNICODE正常工作,您有2种选择:

  1. 自行实施UNICODE

    因此,您需要呈现UNICODE文本。在gfx模式下,使用“完整的” UNICODE字体会产生扭曲,例如:

    IIRC它的栅格​​使其易于解码和渲染(您甚至可以在较新的OS中从中创建一个大的位图,并在MS-DOS中使用它作为字体)。要在gfx模式下进行渲染,可以使用直接像素访问(VGA / VESA)。在文本模式下,要用实际使用的字符更新EGA / VGA字体要困难得多。但屏幕上实际呈现的不同字符数限制为每种字体256'。有关更多信息,请参见:

    粗略支持整个UNICODE的问题在MS-DOS下是一个问题,因为即使在较小的分辨率下,完整字体通常也要大12-64 MB,因此您需要有足够的 XMS内存(因为您没有不再适合640 KB或1Mbyte模型),并实现对使用过的字符的快速分页/访问,以便可以快速使用...另一个选择是使用32位保护模式,在该模式下您可以进行32位线性内存访问(但是您不再拥有MS- DOS支持,需要自己完成所有操作系统工作,但是像DOS4GW这样的扩展程序可以为您完成其中的一些工作...)

    您可以使用一种快捷方式来避免内存管理。您可以创建RAMDISC并将原始字体图像作为文件存储在RAMDISC中。对它的文件访问应该是快速的(比访问HDD快得多)……因此在应用程序开始将字体从HDD复制到RAMDISC位置后,只需使用它即可……不再需要此XMS。

  2. 从UNICODE字符串转换为扩展的ASCII

    带有支持标准ASCII表之外的特殊字符的字符。为此,有MS-DOS实用程序(支持latin1,2,kamenicky等),它们提供了扩展的字体和键盘处理功能(在选定的代码页内)。

    因此,您需要具有要支持的所有字符的转换表,并在UTF-8,UTF-16和ASCII +扩展字符之间进行映射。但是,这种方式只能支持128个扩展字符。

本文链接:https://www.f2er.com/3057656.html

大家都在问