【问题标题】:dagger output java (char)134 doesnt work cp1252匕首输出java(char)134不起作用cp1252
【发布时间】:2018-07-17 17:24:00
【问题描述】:

通常我的程序应该将所有 CP1252 代码输出为字符:

System.out.println("actual file.encoding: "+System.getProperty("file.encoding")); // CP1252


for (int i = 0; i < 500; i++) {
    System.out.println("Nr.: "+i+ " Symbol: "+(char)i");
}

但是输出是: (整个输出的sn-p!)

Nr.: 124 Symbol: |
Nr.: 125 Symbol: }
Nr.: 126 Symbol: ~
Nr.: 127 Symbol: 
Nr.: 128 Symbol: ?
Nr.: 129 Symbol: ?
Nr.: 130 Symbol: ?
Nr.: 131 Symbol: ?
Nr.: 132 Symbol: ?
Nr.: 133 Symbol: ?
Nr.: 134 Symbol: ?
Nr.: 135 Symbol: ?

但在https://en.wikipedia.org/wiki/Windows-1252 中写到 134 是:†

为什么不显示 †?

【问题讨论】:

  • 您错过了 Java 中的字符和字符串始终是 UTF-16/UCS-2。默认编码仅在从字节转换为字符串(或字符)时适用,反之亦然(未指定显式编码)。这不适用于这里。

标签: java char show dagger cp1252


【解决方案1】:

CP1252 中的字节值 134(或 0x86)确实是匕首,但 Java 中的 char 始终是 UTF-16(Unicode)和 UTF-16 U+0080 - U+00FF(整数代码点 128 - 159)是非图形字符,而 U+2020 是对应于 CP1252 字节 0x86 的字符。

使用System.out.write(/*int 0-255 only*/i) 输出一个已经编码的字节。或者在这种情况下不太方便但在其他情况下更可取,将字节放入数组byte[] 并使用System.out.write(byte[])

【讨论】:

  • 嗯。复杂。 FileWriter 怎么样。我也无法在我的文本文件 xD 中写入 †
【解决方案2】:

啊,现在可以了... 有人知道这里涉及哪些字符集?我稍后会发现,但现在很混乱。 谢谢: 它适用于对应于 8224 的 Unicode U+2020(十六进制):

fW.write("Omg it writes † : ");
        fW.write(13);
        fW.write(10);
        fW.write(0x2020);
        fW.write(8224);
        fW.write(13);
        fW.write(10);

输出:

    Begin:
Omg it writes † : 
††

【讨论】:

  • 我假设我的 java 程序采用 i - 我的迭代器(我希望这个词被正确使用..)并将其转换为 2 个字节的 utf-16 符号。然后将其写入具有不同字符集且不理解所有 utf-16 符号的文本文件中。也许是 cp 1252 ..?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-10-06
  • 2020-10-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多