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

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

我有一些想法为什么这个奇怪的输出..但任何人都可以给我一些想法,以便我也可以打印扩展的ASCII …

ASCII 1530x99 )与Unicode U+0099 (控制字符)不同。

该程序应该按照您的意图执行:

 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); } } 

输出:

Ü

从上面的输出中可以看出,正确打印了预期的字符。


概念的延伸

此外,我编写了一个程序,打印出扩展的Ascii的Unicode值。 正如您在下面的输出中所看到的,很多字符都无法显示为本机char

码:

 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))); } } } 

输出:

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

参考表:( 来源 )

 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 

“扩展ASCII”是模糊的。 ASCII有许多扩展,它们定义了127到255之间字节值的字形。这些扩展称为代码页 。 一些比较常见的包括:

  • CP437 ,原始IBM PC的标准
  • ISO 8859-1也称为代码页1252 ,用于大多数西欧语言版本的Windows的编码用于除控制台之外的所有内容

你真的需要知道你的终端期望的字符编码 ,否则你最终会打印垃圾 。 在Java中,您应该能够检查Charset.defaultCharset() ( Charset文档 )的值。

编码字符的方法比单字节“扩展ASCII”代码页要多得多。 Unicode需要比255更多的代码点,因此有各种频繁使用的固定宽度和可变宽度编码。 这个页面似乎是Java中字符编码的一个很好的指南 。

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

如果这是终端编码问题,我相信这个答案https://stackoverflow.com/a/362006/4828060

是一种绕过问题的快速而直接的方法。 只需将-Dfile.encoding = some_encoding添加到java命令的参数中,

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