简体   繁体   English

如何从整数值打印java中的扩展ASCII码

[英]How to print the extended ASCII code in java from integer value

public static void main(String[] args) 
{
int i=153;
int j=63;
System.out.println((char)i);
System.out.println((char)j);
}


OUTPUT:-
?
?

I have some ideas why is this strange output.. But can anyone give me some idea so that i can print the extended ASCIIs as well..我有一些想法为什么这个奇怪的输出..但是任何人都可以给我一些想法,以便我也可以打印扩展的 ASCIIs ..

ASCII 153 ( 0x99 ) is different from Unicode U+0099 (Control character). ASCII 153 ( 0x99 ) 与 Unicode U+0099 (控制字符)不同。

Solution解决方案

This program should do what you intend it to do:这个程序应该做你想要它做的事情:

public class ExtendedAscii {
    public static final char[] EXTENDED = { 0x00C7, 0x00FC, 0x00E9, 0x00E2,
            0x00E4, 0x00E0, 0x00E5, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF,
            0x00EE, 0x00EC, 0x00C4, 0x00C5, 0x00C9, 0x00E6, 0x00C6, 0x00F4,
            0x00F6, 0x00F2, 0x00FB, 0x00F9, 0x00FF, 0x00D6, 0x00DC, 0x00A2,
            0x00A3, 0x00A5, 0x20A7, 0x0192, 0x00E1, 0x00ED, 0x00F3, 0x00FA,
            0x00F1, 0x00D1, 0x00AA, 0x00BA, 0x00BF, 0x2310, 0x00AC, 0x00BD,
            0x00BC, 0x00A1, 0x00AB, 0x00BB, 0x2591, 0x2592, 0x2593, 0x2502,
            0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557,
            0x255D, 0x255C, 0x255B, 0x2510, 0x2514, 0x2534, 0x252C, 0x251C,
            0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566,
            0x2560, 0x2550, 0x256C, 0x2567, 0x2568, 0x2564, 0x2565, 0x2559,
            0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588,
            0x2584, 0x258C, 0x2590, 0x2580, 0x03B1, 0x00DF, 0x0393, 0x03C0,
            0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4,
            0x221E, 0x03C6, 0x03B5, 0x2229, 0x2261, 0x00B1, 0x2265, 0x2264,
            0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A,
            0x207F, 0x00B2, 0x25A0, 0x00A0 };

    public static final char getAscii(int code) {
        if (code >= 0x80 && code <= 0xFF) {
            return EXTENDED[code - 0x7F];
        }
        return (char) code;
    }

    public static final void printChar(int code) {
        System.out.printf("%c%n", getAscii(code));
    }

    public static void main(String[] args) {
        printChar(153);
        printChar(63);
    }
}

Output:输出:

Ü ü
? ?

As you can see from the output above, the intended character gets printed correctly.从上面的输出中可以看出,预期的字符被正确打印。


Extension of Concept概念的延伸

Also, I wrote a program that prints out the Unicode values for the extended Ascii.另外,我编写了一个程序来打印出扩展 Ascii 的 Unicode 值。 As you can see in the output below, a lot of characters have trouble being displayed as native char .正如您在下面的输出中看到的那样,许多字符无法显示为原生char

Code:代码:

public class ExtendedAscii {
    public static final char[] EXTENDED = { 0x00C7, 0x00FC, 0x00E9, 0x00E2,
            0x00E4, 0x00E0, 0x00E5, 0x00E7, 0x00EA, 0x00EB, 0x00E8, 0x00EF,
            0x00EE, 0x00EC, 0x00C4, 0x00C5, 0x00C9, 0x00E6, 0x00C6, 0x00F4,
            0x00F6, 0x00F2, 0x00FB, 0x00F9, 0x00FF, 0x00D6, 0x00DC, 0x00A2,
            0x00A3, 0x00A5, 0x20A7, 0x0192, 0x00E1, 0x00ED, 0x00F3, 0x00FA,
            0x00F1, 0x00D1, 0x00AA, 0x00BA, 0x00BF, 0x2310, 0x00AC, 0x00BD,
            0x00BC, 0x00A1, 0x00AB, 0x00BB, 0x2591, 0x2592, 0x2593, 0x2502,
            0x2524, 0x2561, 0x2562, 0x2556, 0x2555, 0x2563, 0x2551, 0x2557,
            0x255D, 0x255C, 0x255B, 0x2510, 0x2514, 0x2534, 0x252C, 0x251C,
            0x2500, 0x253C, 0x255E, 0x255F, 0x255A, 0x2554, 0x2569, 0x2566,
            0x2560, 0x2550, 0x256C, 0x2567, 0x2568, 0x2564, 0x2565, 0x2559,
            0x2558, 0x2552, 0x2553, 0x256B, 0x256A, 0x2518, 0x250C, 0x2588,
            0x2584, 0x258C, 0x2590, 0x2580, 0x03B1, 0x00DF, 0x0393, 0x03C0,
            0x03A3, 0x03C3, 0x00B5, 0x03C4, 0x03A6, 0x0398, 0x03A9, 0x03B4,
            0x221E, 0x03C6, 0x03B5, 0x2229, 0x2261, 0x00B1, 0x2265, 0x2264,
            0x2320, 0x2321, 0x00F7, 0x2248, 0x00B0, 0x2219, 0x00B7, 0x221A,
            0x207F, 0x00B2, 0x25A0, 0x00A0 };

    public static void main(String[] args) {
        for (char c : EXTENDED) {
            System.out.printf("%s, ", new String(Character.toChars(c)));
        }
    }
}

Output:输出:

Ç, ü, é, â, ä, à, å, ç, ê, ë, è, ï, î, ì, Ä, Å, É, æ, Æ, ô, ö, ò, û, ù, ÿ, Ö, Ü, ¢, £, ¥, ?, ƒ, á, í, ó, ú, ñ, Ñ, ª, º, ¿, ?, ¬, ½, ¼, ¡, «, », ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ß, ?, ?, ?, ?, µ, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ±, ?, ?, ?, ?, ÷, ?, °, ?, ·, ?, ?, ², ?, , Ç, ü, é, â, ä, à, å, ç, ê, ë, è, ï, î, ì, Ä, Å, É, æ, Æ, ô, ö, ò, û, ù, ÿ, Ö, Ü, ¢, £, ¥, ?, ƒ, á, í, ó, ú, ñ, Ñ, ª, º, ¿, ?, ¬, ½, ¼, ¡, «, », ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ß, ?, ?, ?, ?, µ, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ±, ?, ?, ?, ?, ÷, ?, °, ?, ·, ?, ?, ², ?, ,

Reference Table: ( source )参考表:(来源

Dec Hex Unicode     Char    Description
--- --- -------     ----    -----------------------------------
128 80  U+00C7      Ç   latin capital letter c with cedilla
129 81  U+00FC      ü   latin small letter u with diaeresis
130 82  U+00E9      é   latin small letter e with acute
131 83  U+00E2      â   latin small letter a with circumflex
132 84  U+00E4      ä   latin small letter a with diaeresis
133 85  U+00E0      à   latin small letter a with grave
134 86  U+00E5      å   latin small letter a with ring above
135 87  U+00E7      ç   latin small letter c with cedilla
136 88  U+00EA      ê   latin small letter e with circumflex
137 89  U+00EB      ë   latin small letter e with diaeresis
138 8A  U+00E8      è   latin small letter e with grave
139 8B  U+00EF      ï   latin small letter i with diaeresis
140 8C  U+00EE      î   latin small letter i with circumflex
141 8D  U+00EC      ì   latin small letter i with grave
142 8E  U+00C4      Ä   latin capital letter a with diaeresis
143 8F  U+00C5      Å   latin capital letter a with ring above
144 90  U+00C9      É   latin capital letter e with acute
145 91  U+00E6      æ   latin small ligature ae
146 92  U+00C6      Æ   latin capital ligature ae
147 93  U+00F4      ô   latin small letter o with circumflex
148 94  U+00F6      ö   latin small letter o with diaeresis
149 95  U+00F2      ò   latin small letter o with grave
150 96  U+00FB      û   latin small letter u with circumflex
151 97  U+00F9      ù   latin small letter u with grave
152 98  U+00FF      ÿ   latin small letter y with diaeresis
153 99  U+00D6      Ö   latin capital letter o with diaeresis
154 9A  U+00DC      Ü   latin capital letter u with diaeresis
155 9B  U+00A2      ¢   cent sign
156 9C  U+00A3      £   pound sign
157 9D  U+00A5      ¥   yen sign
158 9E  U+20A7      ₧   peseta sign
159 9F  U+0192      ƒ   latin small letter f with hook
160 A0  U+00E1      á   latin small letter a with acute
161 A1  U+00ED      í   latin small letter i with acute
162 A2  U+00F3      ó   latin small letter o with acute
163 A3  U+00FA      ú   latin small letter u with acute
164 A4  U+00F1      ñ   latin small letter n with tilde
165 A5  U+00D1      Ñ   latin capital letter n with tilde
166 A6  U+00AA      ª   feminine ordinal indicator
167 A7  U+00BA      º   masculine ordinal indicator
168 A8  U+00BF      ¿   inverted question mark
169 A9  U+2310      ⌐   reversed not sign
170 AA  U+00AC      ¬   not sign
171 AB  U+00BD      ½   vulgar fraction one half
172 AC  U+00BC      ¼   vulgar fraction one quarter
173 AD  U+00A1      ¡   inverted exclamation mark
174 AE  U+00AB      «   left-pointing double angle quotation mark
175 AF  U+00BB      »   right-pointing double angle quotation mark
176 B0  U+2591      ░   light shade
177 B1  U+2592      ▒   medium shade
178 B2  U+2593      ▓   dark shade
179 B3  U+2502      │   box drawings light vertical
180 B4  U+2524      ┤   box drawings light vertical and left
181 B5  U+2561      ╡   box drawings vertical single and left double
182 B6  U+2562      ╢   box drawings vertical double and left single
183 B7  U+2556      ╖   box drawings down double and left single
184 B8  U+2555      ╕   box drawings down single and left double
185 B9  U+2563      ╣   box drawings double vertical and left
186 BA  U+2551      ║   box drawings double vertical
187 BB  U+2557      ╗   box drawings double down and left
188 BC  U+255D      ╝   box drawings double up and left
189 BD  U+255C      ╜   box drawings up double and left single
190 BE  U+255B      ╛   box drawings up single and left double
191 BF  U+2510      ┐   box drawings light down and left
192 C0  U+2514      └   box drawings light up and right
193 C1  U+2534      ┴   box drawings light up and horizontal
194 C2  U+252C      ┬   box drawings light down and horizontal
195 C3  U+251C      ├   box drawings light vertical and right
196 C4  U+2500      ─   box drawings light horizontal
197 C5  U+253C      ┼   box drawings light vertical and horizontal
198 C6  U+255E      ╞   box drawings vertical single and right double
199 C7  U+255F      ╟   box drawings vertical double and right single
200 C8  U+255A      ╚   box drawings double up and right
201 C9  U+2554      ╔   box drawings double down and right
202 CA  U+2569      ╩   box drawings double up and horizontal
203 CB  U+2566      ╦   box drawings double down and horizontal
204 CC  U+2560      ╠   box drawings double vertical and right
205 CD  U+2550      ═   box drawings double horizontal
206 CE  U+256C      ╬   box drawings double vertical and horizontal
207 CF  U+2567      ╧   box drawings up single and horizontal double
208 D0  U+2568      ╨   box drawings up double and horizontal single
209 D1  U+2564      ╤   box drawings down single and horizontal double
210 D2  U+2565      ╥   box drawings down double and horizontal single
211 D3  U+2559      ╙   box drawings up double and right single
212 D4  U+2558      ╘   box drawings up single and right double
213 D5  U+2552      ╒   box drawings down single and right double
214 D6  U+2553      ╓   box drawings down double and right single
215 D7  U+256B      ╫   box drawings vertical double and horizontal single
216 D8  U+256A      ╪   box drawings vertical single and horizontal double
217 D9  U+2518      ┘   box drawings light up and left
218 DA  U+250C      ┌   box drawings light down and right
219 DB  U+2588      █   full block
220 DC  U+2584      ▄   lower half block
221 DD  U+258C      ▌   left half block
222 DE  U+2590      ▐   right half block
223 DF  U+2580      ▀   upper half block
224 E0  U+03B1      α   greek small letter alpha
225 E1  U+00DF      ß   latin small letter sharp s
226 E2  U+0393      Γ   greek capital letter gamma
227 E3  U+03C0      π   greek small letter pi
228 E4  U+03A3      Σ   greek capital letter sigma
229 E5  U+03C3      σ   greek small letter sigma
230 E6  U+00B5      µ   micro sign
231 E7  U+03C4      τ   greek small letter tau
232 E8  U+03A6      Φ   greek capital letter phi
233 E9  U+0398      Θ   greek capital letter theta
234 EA  U+03A9      Ω   greek capital letter omega
235 EB  U+03B4      δ   greek small letter delta
236 EC  U+221E      ∞   infinity
237 ED  U+03C6      φ   greek small letter phi
238 EE  U+03B5      ε   greek small letter epsilon
239 EF  U+2229      ∩   intersection
240 F0  U+2261      ≡   identical to
241 F1  U+00B1      ±   plus-minus sign
242 F2  U+2265      ≥   greater-than or equal to
243 F3  U+2264      ≤   less-than or equal to
244 F4  U+2320      ⌠   top half integral
245 F5  U+2321      ⌡   bottom half integral
246 F6  U+00F7      ÷   division sign
247 F7  U+2248      ≈   almost equal to
248 F8  U+00B0      °   degree sign
249 F9  U+2219      ∙   bullet operator
250 FA  U+00B7      ·   middle dot
251 FB  U+221A      √   square root
252 FC  U+207F      ⁿ   superscript latin small letter n
253 FD  U+00B2      ²   superscript two
254 FE  U+25A0      ■   black square
255 FF  U+00A0      no-break space

"Extended ASCII" is nebulous. “扩展 ASCII”是模糊的。 There are many extensions to ASCII that define glyphs for the byte values between 127 and 255. These are referred to as code pages .有许多 ASCII 扩展为 127 到 255 之间的字节值定义字形。这些被称为代码页 Some of the more common ones include:一些更常见的包括:

  • CP437 , the standard on original IBM PCs CP437 ,原始 IBM PC 上的标准
  • ISO 8859-1 also known as Code page 1252 , the encoding used for most Western European-language versions of Windows for everything but the console ISO 8859-1也称为代码页 1252 ,该编码用于大多数西欧语言版本的 Windows,用于除控制台之外的所有内容

You really need to know what character encoding your terminal is expecting, otherwise you'll end up printing garbage .你真的需要知道你的终端期望什么字符编码,否则你最终会打印垃圾 In Java, you should be able to check the value of Charset.defaultCharset() ( Charset documentation ).在 Java 中,您应该能够检查Charset.defaultCharset()的值( Charset 文档)。

There are many more ways to encode characters than just single-byte "extended ASCII" code pages.除了单字节“扩展 ASCII”代码页之外,还有更多的字符编码方法。 Unicode requires far more code points than 255, so there are various fixed-width and variable-width encodings that are used frequently. Unicode 需要比 255 多得多的代码点,因此经常使用各种固定宽度和可变宽度编码。 This page seems to be a good guide to character encoding in Java .这个页面似乎是一个很好的 Java 字符编码指南

String iChar = new Character((char)i).toString(); 
String jChar = new Character((char)j).toString(); 

System.out.println(iChar);
System.out.println(jChar);

If this is a terminal encoding issue, I believe that this answer https://stackoverflow.com/a/362006/4828060如果这是终端编码问题,我相信这个答案https://stackoverflow.com/a/362006/4828060

is a fast and straightforward way to bypass the problem.是绕过问题的一种快速而直接的方法。 Just add -Dfile.encoding=some_encoding to the parameters of the java command,只需将 -Dfile.encoding=some_encoding 添加到 java 命令的参数中,

eg java -Dfile.encoding=UTF-8 … MainClass例如 java -Dfile.encoding=UTF-8 ... MainClass

我尝试使用“扩展的ASCII”方法来显示带有Ascii代码的字符串,但对于“ù”却得到了点“。”,并且所有特殊字符均无法正确显示。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM