目前,我正在尝试以mimehtml" target="_blank">格式读取文件,该文件具有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
等…等…
在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
等…等…
我无法将Linux版本转换为图片,因为这一切都变成了一些带有许多颠倒的“?”的时髦符号。和“ 1/2”符号。
谁能启发我发生的事情并可能提供解决方案?玩了一个星期甚至更多的代码。
�
是三个字符的序列- 0xEF
0xBF
0xBD
,并且是Unicode代码点的UTF-8表示形式0xFFFD
。该代码点本身就是非法UTF-8序列的替换字符。
显然,由于某种原因,您的源代码中涉及的例程集(在Linux上)正在错误地处理PNG标头。该PNG头与所述字节开始0x89
(和后跟0x50
,0x4E
,0x47
),这是在视窗(其可能被处理该文件作为CP1252的序列字节)正确处理。在CP1252中,0x89
字符显示为‰
。
但是,在Linux上,此字节已由UTF-8例程(或认为将文件作为UTF-8序列进行处理的库)解码。由于0x89本身不是ASCII-7范围内的有效代码点(请参阅:UTF-8编码方案),因此无法将其映射到0x00-0x7F范围内的有效UTF-8代码点。而且,它不能映射到表示为多字节UTF-8序列的有效代码点,因为所有多字节序列都以至少2位(设置为1(11....
))开头,因为这是文件的开头,也不能是连续字节。结果是,UTF-8解码器现在替换0x89
为UTF-8替换字符0xEF
0xBF
0xBD
(考虑到文件开头不是UTF-8,这太愚蠢了),它将显示在ISO-8859-1为�
。
如果需要解决此问题,则需要确保在Linux中执行以下操作:
0xFFFD
它实际上是菱形字符…)的空前情况,并可能导致进一步的更改(不太可能,但是您永远都不知道编辑器如何/ viewer已编写)。*显然,如果您将字节序列转换为字符或String对象,则Java运行时将字节序列解码为UTF-16代码点。
我刚刚在Java11以IntelliJ Maven项目的形式开发了我的第一个JavaFX应用程序,并达到了它按预期工作的地步。到目前为止,我只使用Maven来处理依赖关系,使用IntelliJ来编译和运行我的项目。 然后我继续尝试以JAR文件的形式打包项目,发现由于Java11不再包含JavaFX,JAR生成变得更加困难(是的,我知道,我应该早点检查这个)。在阅读JavaFX 11的文档时,我决定
代码: 当Charset.forName(name)的name为UTF-7时发生问题; 在我的Linux平台上,我总是得到非法的CharsetNameException。 但在我的windows平台上看起来还可以。 两个平台有相同的源代码和java版本 Java版本"1.7.0_17"Java(TM)SE运行时环境(build 1.7.0_17-b02)JavaHotSpot(TM)64位服务器V
问题内容: 我试图比较两个由sha512编码的不同字符串。但是,结果不同。我的意思是这可能是编码问题。我希望你能帮助我。 这是我的Java代码: 并且,这是我的C#代码: 问题出在哪里 ?谢谢你们 更新 如果我不指定编码类型,那么我想它就是Unicode。结果是这样(不指定任何内容): 相反,如果我在Java中指定UTF-16: 总是不同的! 问题答案: 在C#中使用的in对应于 Little-e
我正在寻找一种在读取字节(作为字节[])和从文件中读取字符串行之间切换的方法。我知道字节[]可以通过FileInputStream从文件中获取,字符串可以通过BufferedReader获取,但同时使用这两个字节是有问题的。我知道字节段有多长。当我写文件时,字符串编码可以保持不变。该文件类型是一个仍在开发中的自定义文件类型,因此我可以更改向其写入数据的方式。 我怎么能读取字符串和字节[]s从相同的
为什么运算符只应该是4个字节却生成12个字节?当我引用变量时,这只是引用数组第一个索引的内存地址。实际上,我打印了第一个索引的内存地址,并将其与进行了比较,它们产生了相同的内存地址结果,这证实了它们都引用了数组的第一个索引,但是“array”产生了12个字节,而产生了4个字节。
问题内容: 我刚刚注意到了这一点: 为什么这两行的输出不同? 我无法分享确切的数据,但我将尝试提供尽可能多的详细信息: 感谢@jezrael和@ayhan,这就是发生的事情,让我使用@jezael提供的示例: 如果我们看一下第3行: 以及我写条件的方式: 由于符号的优先级高于,因此不带方括号的等效于: 带括号: 我认为用数字说明这个问题要容易一些: 因此,经验教训是:总是加括号!!! 我希望我可以