相关疑难解决方法(0)

哪个系统组件负责在Java应用程序中绑定Unicode连接?

这是一个"元问题",当我试图为我的另一个问题找到更好的规范时,我遇到了这个问题(在Mac OS X上的Java Swing JComponent中渲染Devanagari连字符(Unicode)).

到目前为止我还不太了解的是给定系统的哪个"组件"(想要更好的词)负责在Java中显示Unicode文本,更具体地说是连字.

据我了解,以下组件对流程有影响:

  1. 系统字符编码(例如,Mac OS X 10.6上的UTF-8,Windows 7上的UTF-16(根据akira对此superuser.com帖子的评论)).
  2. Java Charset(默认情况下是Mac OS X 10.6上的MacRoman,Windows 7上的cp1252).
  3. 用于呈现文本的字体,以及该字体的编码信息(正如Donal Fellows在我的另一个问题上所建议的那样:

    "字体包含有关他们正在使用的编码的信息".

  4. 显然,要呈现的字符是否存在于各自的Unicode代码点.

因此,如果一串Unicode字符无法正确显示(如我的另一个问题所示,sa),问题最可能出在哪里?即,什么"组件"(更好的词会是什么?)负责"绑定"结扎,它的组成?

非常感谢您提前,如果您需要更多信息,请告诉我.

java unicode rendering system character-encoding

6
推荐指数
1
解决办法
731
查看次数

从Windows和Linux读取文件会产生不同的结果(字符编码?)

目前我正在尝试以mime格式读取文件,其中包含一些png的二进制字符串数据.

在Windows中,读取文件为我提供了正确的二进制字符串,这意味着我只需复制字符串并将扩展名更改为png即可看到图片.


在Windows中读取文件后的示例如下:

    --fh-mms-multipart-next-part-1308191573195-0-53229
     Content-Type: image/png;name=app_icon.png
     Content-ID: "<app_icon>"
     content-location: app_icon.png

    ‰PNG
Run Code Online (Sandbox Code Playgroud)

等...等...

在Linux中读取文件后的示例如下:

    --fh-mms-multipart-next-part-1308191573195-0-53229
     Content-Type: image/png;name=app_icon.png
     Content-ID: "<app_icon>"
     content-location: app_icon.png

     �PNG
Run Code Online (Sandbox Code Playgroud)

等...等...


我无法将Linux版本转换成图片,因为它变成了一些时髦的符号,并且有很多颠倒的"?" 和"1/2"符号.

任何人都可以告诉我发生了什么,也许可以提供解决方案?已经玩了一周以上的代码了.

java linux windows png character-encoding

6
推荐指数
2
解决办法
1万
查看次数

UTF-8 字符在记事本中丢失或显示为方框,但在网络浏览器和其他文本编辑器中工作正常

text/plain; charset=utf-8我将 UTF-8 文本存储在数据库中并在 Web 应用程序中使用。一切都运转良好。我可以在浏览器窗口上看到 UTF-8 文本,没有任何问题。

但是,当我将该文本保存到文件并尝试在 Windows 记事本中打开它时,我发现一些字符丢失并显示为一个小矩形框。但是,该文本文件在其他编辑器(例如 EditPlus 和 Notepad++)中看起来不错。

这是如何引起的以及如何解决?

windows notepad utf-8 character-encoding

5
推荐指数
1
解决办法
2万
查看次数

String.getBytes()在不同的默认字符集中

使用String.getBytes()是否安全?当程序在具有不同默认值的不同系统上运行时会发生什么charset?我想我可以获得不同的内容byte[]?是否可以定义首选字符集Java 1.4?

java encoding

5
推荐指数
1
解决办法
7628
查看次数

如何更改 Eclipse 中的*默认*默认编码?

每次创建新工作区时,Eclipse 都会默认使用 Cp1250 编码。

每当我创建项目的新分支并切换到 Eclipse 中的新工作区时,我需要转到Window -> Preferences -> General -> Workspace : Text file编码并手动切换到“Other: UTF-8” ”。如果我忘记了这一步,Eclipse 会破坏项目文件中的 UTF-8 字符。

在此输入图像描述

我可以以某种方式永久更改默认设置,以便所有新工作区都以 UTF-8 启动,而无需手动切换它们吗?

eclipse character-encoding

5
推荐指数
1
解决办法
7096
查看次数

在Java/Scala中将字节数组转换为字符串时修剪字节数组

使用ByteBuffer,我可以将字符串转换为字节数组:

val x = ByteBuffer.allocate(10).put("Hello".getBytes()).array()
> Array[Byte] = Array(104, 101, 108, 108, 111, 0, 0, 0, 0, 0)
Run Code Online (Sandbox Code Playgroud)

将字节数组转换为字符串时,我可以使用new String(x).但是,字符串变为hello?????,我需要在将字节数组转换为字符串之前对其进行修剪.我怎样才能做到这一点?

我使用这段代码来减少零,但我想知道是否有更简单的方法.

def byteArrayToString(x: Array[Byte]) = {
    val loc = x.indexOf(0)
    if (-1 == loc)
      new String(x)
    else if (0 == loc)
      ""
    else
      new String(x.slice(0,loc))
}
Run Code Online (Sandbox Code Playgroud)

java string scala bytearray

4
推荐指数
1
解决办法
4218
查看次数

Windows 10 CLI UTF-8 编码

问题:

在使用斯洛文尼亚语键盘布局的英文 Windows 10 上,所有命令行界面似乎都无法显示(打印)UTF-8 字符,即 ?、š 和 ž,它们被替换为 ?。(我假设所有 UTF-8 特定字符,因为 ? 和 ? 也不起作用。)

测试于:

  • Windows 10 64 位英语 - 斯洛文尼亚语键盘布局上的 CMD、Powershell、Cmder ......失败
  • Windows 10 64 位英语语言上的 Intellij IDEA - 斯洛文尼亚语键盘布局......成功 -> 在 IDE 中根据需要工作,但不是 CLI。
  • CMD Windows 10 64 位英文语言 - 英文键盘 ... 成功
  • CMD Windows 10 64 位斯洛文尼亚语 - 斯洛文尼亚语键盘布局...成功
  • 多个 Linux 发行版(Ubuntu、Mint、Kali)……成功

到目前为止尝试过:

  • 将 chcp 更改为 chcp 65001 ... 不成功
  • 在 regedit 中创建自动运行文件以强制使用 UTF-8 ... 不成功
  • 不同的java编译器……不成功

示例代码:

public class Test2 {
public static void …
Run Code Online (Sandbox Code Playgroud)

java windows cmd command-line-interface

4
推荐指数
1
解决办法
5091
查看次数

Source.fromResource()在本地工作,但在服务器上引发java.nio.charset.MalformedInputException

我正在使用以下代码读取资源:

  val source = Source.fromResource(pathWithoutSlash)
  val lines:Seq[String] = (for (l <- source.getLines() if ! l.trim.isEmpty) yield l.trim).toList
Run Code Online (Sandbox Code Playgroud)

当我在本地运行该代码时,它工作正常-但在服务器上,它失败并显示:

Exception in thread "main" java.nio.charset.MalformedInputException: Input length = 1
    at java.base/java.nio.charset.CoderResult.throwException(CoderResult.java:274)
    at java.base/sun.nio.cs.StreamDecoder.implRead(StreamDecoder.java:339)
    at java.base/sun.nio.cs.StreamDecoder.read(StreamDecoder.java:178)
    at java.base/java.io.InputStreamReader.read(InputStreamReader.java:185)
    at java.base/java.io.BufferedReader.fill(BufferedReader.java:161)
    at java.base/java.io.BufferedReader.readLine(BufferedReader.java:326)
    at java.base/java.io.BufferedReader.readLine(BufferedReader.java:392)
    at scala.io.BufferedSource$BufferedLineIterator.hasNext(BufferedSource.scala:70)
Run Code Online (Sandbox Code Playgroud)

我猜是因为文件确实包含一些重音字符,例如:éclair's,并且服务器上使用的默认字符集可能与我本地的字符集不同。

我的问题是,如何更改服务器上的字符集,使其与我本地拥有的字符集匹配(以及如何检查本地拥有的字符集)?

谢谢。

java scala character-encoding

4
推荐指数
1
解决办法
69
查看次数

sbt测试编码hickup

我正在编写一个用于地理坐标工作的Java库,测试是使用Scala中的specs2实现的.我有很多测试,它们对包含度数符号°(非ASCII字符)的字符串进行字符串比较.

如果我从IntelliJ中运行这些测试,它们都会通过.他们也传递了特拉维斯CI.但是,如果我sbt test从我的Power Shell(Windows x64)运行(sbt 11.3),所有这些测试都会失败,并且控制台会显示错误的字符串,如屏幕截图所示:

编码问题

可能是什么问题,我该如何解决?我检查了文件是UTF8编码的.另请注意,更改我的Java配置无济于事,因为如果其他人克隆了存储库,则必须运行测试(因此任何仅在我的系统上解决问题的解决方案都无济于事).但我完全不知道这里出了什么问题......

java sbt specs2

3
推荐指数
1
解决办法
3286
查看次数

Java UTF-8编码产生错误的输出

在Java中,我一直在尝试使用UTF-8编码将String写入文件,稍后将由另一个用不同编程语言编写的程序读取.在这样做时,我注意到将String编码为字节数组时创建的字节似乎没有正确的字节值.

我将问题缩小到符号"£",这似乎在编码为UTF-8时产生不正确的字节

byte[] byteArray = "£".getBytes(Charset.forName("UTF-8"));

// Print out the Byte Array of the UTF-8 converted string
// Upcast byte values to print the bytes as unsigned
for (byte signedByte : byteArray) {
  System.out.print((signedByte & 0xFF) + " ");
} 
Run Code Online (Sandbox Code Playgroud)

这输出6个字节的十进制值:239 190 130 239 189 163,以十六进制表示:ef be 82 ef bd a3

http://www.utf8-chartable.de/但是说十六进制中"£"的值是:c2 a3,输出应该是:194 163

当编码为UTF-8时,其他字符串似乎产生正确的字节,所以我想知道为什么Java为"£"生成这6个字节,以及我应该如何通过使用UTF-8编码将字符串正确地转换为字节数组

我也试过了

OutputStreamWriter out = new OutputStreamWriter(new FileOutputStream(outputFile), "UTF-8");
out.write("£");
out.close();
Run Code Online (Sandbox Code Playgroud)

但这产生了相同的6个字节

java string encoding utf-8

2
推荐指数
1
解决办法
3015
查看次数