为什么Java的String.getBytes()使用“ISO-8859-1”

2023-12-29

来自 java.lang.StringCoding :

String csn = (charsetName == null) ? "ISO-8859-1" : charsetName;

这是 Linux jdk 7 中 Java.lang.getBytes() 使用的内容 我一直认为UTF-8是默认字符集?

Thanks


这有点复杂......

Java tries使用 String.getBytes() 使用默认字符编码返回字节。

  • 默认字符集由系统 file.encoding 属性提供。
  • 这是被缓存的,在 JVM 启动后通过 System.setProperty(..) 更改它是没有用的。
  • 如果 file.encoding 属性未映射到已知的字符集,则指定 UTF-8。

....这是棘手的部分(可能永远不会发挥作用)....

如果系统无法使用默认字符集(UTF-8 或其他字符集)对字符串进行解码或编码,则将回退到 ISO-8859-1。如果后备不起作用……系统就会失败!

....真的...(喘气!)...如果我指定的字符集无法使用,并且UTF-8或ISO-8859-1也无法使用,它会崩溃吗?

是的。 Java 源代码注释在 StringCoding.encode(...) 方法中说明:

// 如果我们找不到 ISO-8859-1(必需的编码),那么安装就会出现严重错误。

...然后它调用 System.exit(1)


那么,为什么在 getBytes() 方法中有意回退到 ISO-8859-1?

尽管可能性不大,但用户 JVM 可能不支持 UTF-8 或 JVM 启动时指定的字符集的解码和编码。

那么,在 getBytes() 期间 String 类中的默认字符集是否正确使用?

不。但是,更好的问题是......


String.getBytes() 是否兑现了它的承诺?

Javadoc 中定义的契约是正确的。

当此字符串无法在中编码时此方法的行为 默认字符集未指定。这CharsetEncoder类应该是 当需要对编码过程进行更多控制时使用。


好消息(以及更好的做事方式)

始终建议在将字节转换为字符串时显式指定“ISO-8859-1”或“US-ASCII”或“UTF-8”或任何您想要的字符集,反之亦然 - 除非 - 您之前已获得默认字符集,并 100% 确定它是您需要的。

请改用此方法:

public byte[] getBytes(String charsetName)

要查找系统的默认值,只需使用:

Charset.defaultCharset()

希望有帮助。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么Java的String.getBytes()使用“ISO-8859-1” 的相关文章

  • Java new Date() 打印

    刚刚学习 Java 我知道这可能听起来很愚蠢 但我不得不问 System out print new Date 我知道参数中的任何内容都会转换为字符串 最终值是 new Date 返回对 Date 对象的引用 那么它是如何打印这个的呢 Mo
  • Java中反射是如何实现的?

    Java 7 语言规范很早就指出 本规范没有详细描述反射 我只是想知道 反射在Java中是如何实现的 我不是问它是如何使用的 我知道可能没有我正在寻找的具体答案 但任何信息将不胜感激 我在 Stackoverflow 上发现了这个 关于 C
  • 在画布上绘图

    我正在编写一个 Android 应用程序 它可以在视图的 onDraw 事件上直接绘制到画布上 我正在绘制一些涉及单独绘制每个像素的东西 为此我使用类似的东西 for int x 0 x lt xMax x for int y 0 y lt
  • Play框架运行应用程序问题

    每当我尝试运行使用以下命令创建的新 Web 应用程序时 我都会收到以下错误Play http www playframework org Error occurred during initialization of VM Could no
  • 在 HTTPResponse Android 中跟踪重定向

    我需要遵循 HTTPost 给我的重定向 当我发出 HTTP post 并尝试读取响应时 我得到重定向页面 html 我怎样才能解决这个问题 代码 public void parseDoc final HttpParams params n
  • JAXb、Hibernate 和 beans

    目前我正在开发一个使用 Spring Web 服务 hibernate 和 JAXb 的项目 1 我已经使用IDE hibernate代码生成 生成了hibernate bean 2 另外 我已经使用maven编译器生成了jaxb bean
  • Android MediaExtractor seek() 对 MP3 音频文件的准确性

    我在使用 Android 时无法在eek 上获得合理的准确度MediaExtractor 对于某些文件 例如this one http www archive org download emma solo librivox emma 01
  • Spark 1.3.1 上的 Apache Phoenix(4.3.1 和 4.4.0-HBase-0.98)ClassNotFoundException

    我正在尝试通过 Spark 连接到 Phoenix 并且在通过 JDBC 驱动程序打开连接时不断收到以下异常 为简洁起见 下面是完整的堆栈跟踪 Caused by java lang ClassNotFoundException org a
  • Spring Data JPA 应用排序、分页以及 where 子句

    我目前正在使用 Spring JPA 并利用此处所述的排序和分页 如何通过Spring data JPA通过排序和可分页查询数据 https stackoverflow com questions 10527124 how to query
  • 磁模拟

    假设我在 n m 像素的 2D 表面上有 p 个节点 我希望这些节点相互吸引 使得它们相距越远吸引力就越强 但是 如果两个节点之间的距离 比如 d A B 小于某个阈值 比如 k 那么它们就会开始排斥 谁能让我开始编写一些关于如何随时间更新
  • 路径中 File.separator 和斜杠之间的区别

    使用有什么区别File separator和一个正常的 在 Java 路径字符串中 与双反斜杠相反 平台独立性似乎不是原因 因为两个版本都可以在 Windows 和 Unix 下运行 public class SlashTest Test
  • 如何在Python中获取葡萄牙语字符?

    我正在研究葡萄牙语 角色看起来很奇怪 我怎样才能解决这个问题 代码 import feedparser import random Vou definir os feeds feeds conf feedurl http pplware s
  • Mockito when().thenReturn 不必要地调用该方法

    我正在研究继承的代码 我编写了一个应该捕获 NullPointerException 的测试 因为它试图从 null 对象调用方法 Test expected NullPointerException class public void c
  • 无法解析插件 Java Spring

    我正在使用 IntelliJ IDEA 并且我尝试通过 maven 安装依赖项 但它给了我这些错误 Cannot resolve plugin org apache maven plugins maven clean plugin 3 0
  • 如何在PreferenceActivity中添加工具栏

    我已经使用首选项创建了应用程序设置 但我注意到 我的 PreferenceActivity 中没有工具栏 如何将工具栏添加到我的 PreferenceActivity 中 My code 我的 pref xml
  • Java执行器服务线程池[关闭]

    很难说出这里问的是什么 这个问题是含糊的 模糊的 不完整的 过于宽泛的或修辞性的 无法以目前的形式得到合理的回答 如需帮助澄清此问题以便重新打开 访问帮助中心 help reopen questions 如果我使用 Executor 框架在
  • 如何从终端运行处理应用程序

    我目前正在使用加工 http processing org对于一个小项目 但是我不喜欢它附带的文本编辑器 我使用 vim 编写所有代码 我找到了 pde 文件的位置 并且我一直在从 vim 中编辑它们 然后重新打开它们并运行它们 重新加载脚
  • 玩!框架:运行“h2-browser”可以运行,但网页不可用

    当我运行命令时activator h2 browser它会使用以下 url 打开浏览器 192 168 1 17 8082 但我得到 使用 Chrome 此网页无法使用 奇怪的是它以前确实有效 从那时起我唯一改变的是JAVA OPTS以启用
  • 获取 JVM 上所有引导类的列表?

    有一种方法叫做findBootstrapClass对于一个类加载器 如果它是引导的 则返回一个类 有没有办法找到类已经加载了 您可以尝试首先通过例如获取引导类加载器呼叫 ClassLoader bootstrapLoader ClassLo
  • 编译器抱怨“缺少返回语句”,即使不可能达到缺少返回语句的条件

    在下面的方法中 编译器抱怨缺少退货声明即使该方法只有一条路径 并且它包含一个return陈述 抑制错误需要另一个return陈述 public int foo if true return 5 鉴于Java编译器可以识别无限循环 https

随机推荐

  • CallLog 内容提供商最多返回 500 个结果

    由于某种原因 如果我查询 CallLog 内容提供程序 我最多会得到 500 个结果 另外 我似乎只得到 1 个月前的结果 当我的设备电话应用程序目前显示大约 8 个月时 我用谷歌搜索了它 但我发现的只是 将 CallLog Calls 存
  • 我可以告诉或提示 RubyMine 本地变量或实例变量是什么类型吗?

    我正在尝试利用 RubyMine 快速文档和代码完成 我很高兴地发现它如何很好地集成了 YARD 风格的注释 param Numeric width param Array
  • 使用 AFNetworking 加载离线缓存的 JSON

    我一直在尝试使用 AFNetworking 实现缓存 以便我的缓存 JSON 将离线加载 我以不同的方式尽了最大努力 但根本无法使缓存工作 我不知道我在这里错过了什么 这是我的代码AppDelegate func application a
  • 使用空合并运算符进行隐式转换

    我发现我的程序有一个奇怪的行为 经过进一步分析 我发现我的 C 知识或其他地方可能有问题 我相信这是我的错误 但我无法在任何地方找到答案 public class B public static implicit operator B A
  • Javascript对象根据属性有效求和值

    我在 JS 数组中确实有三个对象 如下所示 2013 03 02T00 00 300 2013 03 01T00 00 200 2013 03 02T00 00 50 我想要类似下面的内容作为上面数组的输出 2013 03 02T00 00
  • Swift:使用 NSOperation 保留循环

    在我的应用程序中 我使用图像加载器类从网络加载图像以用于集合视图 该类跟踪下载操作 并在图像单元格在集合视图中不再可见时取消下载操作 此实现基于 NSOperation 的 raywenderlich 教程 http www raywend
  • 有没有办法在查询中使表名动态化?

    我正在尝试为产品创建类继承设计 有一个包含所有公共字段的基表 然后 对于每种产品类型 都有一个单独的表 其中包含仅适用于该产品类型的字段 因此 为了获取产品的所有数据 我需要JOIN基表以及与相关的任何表product type列在基表中
  • Promise.resolve().then 与 setImmediate 与 nextTick

    NodeJS 0 11 以及 io js 和 Node 0 12 分支都带有原生 Promise 原生承诺have a then method https developer mozilla org en US docs Web JavaS
  • MVC3 提交 Ajax 表单

    我已经阅读了很多关于这个主题的不同帖子 我将继续这样做并尝试各种事情 尽管信息差异很大 但由于我对 MVC 等相对缺乏经验 我觉得我有点绕圈子 情况是这样的 我正在 MVC3 应用程序中显示 Razor 视图 其中包含 jqGrid 中的记
  • 仅在 CopyObject 中拒绝 Amazon S3 访问

    我从 nodejs 脚本上传文件 当我尝试复制对象时 我收到 访问被拒绝 错误 如果我尝试删除该对象或获取它 没有问题并且成功 CopyObject 中有什么特殊的吗 params Bucket buacket name CopySourc
  • 使用 Ajax 更新 Rails 中的元素

    该应用程序允许用户对嵌入视频进行投票 当用户点击上下箭头时 整个页面刷新更新points 几个月来我一直在尝试实现 AJAX 投票 我想要您能提供的最直接的解决方案 即使它不是最有效的 有任何想法吗 My up and down行动来自ap
  • 我可以在我的桌面应用程序中使用谷歌语音识别 API

    我想知道我是否可以在我的桌面应用程序中使用 google 的语音识别 api 我见过一些示例 其中我必须将语音转换为文件并发送到网址 但这将是一个不太麻烦的任务 因为在我的应用程序中 用户必须不断提交他的声音 那么还有其他替代方法可以使用
  • iOS SWRevealViewController - 在控制器之间传递数据

    我正在使用 SWRevealViewController 在我的应用程序中实现滑动菜单 从左侧 一切工作正常 但现在我面临一个小问题 我想从我的 主 视图控制器传递数据 完全可见的控制器 我不称其为 frontViewController
  • 分离的实体传递到持久化

    使用 hibernate 3 6 10 maven 2 postgres 9 我有必须工作的代码 但事实并非如此 在我使用 hibernate 3 6 2 并遇到非常沮丧的错误之前 java lang ClassCastException
  • Composer 未安装本地包依赖项

    在我的 Laravel 5 4composer json 文件中 我有以下内容可以自动加载我的自定义包 请注意 该包尚未发布 而是在本地加载 autoload classmap database seeds database factori
  • 如何确定导致分段错误的原因

    我的代码的目标是接受 2 个命令行参数 包括程序名称 并根据给定的第二个命令行参数打印出所示的响应 如果命令行参数是一个整数 则用户的输入被接受或 成功 如果它是其他任何内容 例如字符串或多个命令行参数 则它将为 Null 并显示错误消息
  • 当光标位于页面之外时可以触发鼠标事件吗?

    我正在创建一个游戏 在该游戏中 人们可以按住鼠标按钮并拖动它来旋转对象 但是 当鼠标位置超出页面边界时 将不再触发所有鼠标事件 这意味着当光标位于页面之外时 对象不再旋转 此外 当用户在页面边界之外释放鼠标时 我无法跟踪这意味着当光标返回页
  • 如何使用 AngularJs 调整 SVG viewBox 的大小?

    类似问题的解决方案涉及 CSS 和img tag 但是 我无法使用 img src myFile svg 因为 SVG 包含 Angular 指令 例如
  • ncurses 捕获扩展键(Control-left、Shift-Function 等)

    我试图在我的 ruby 程序中捕获 Control Left Shift F10 等 通常 仅使用 getch 我会得到一个有效的整数列表 例如 27 91 50 50 126 但我担心这些可能取决于系统或终端 经过谷歌搜索后 我发现了 u
  • 为什么Java的String.getBytes()使用“ISO-8859-1”

    来自 java lang StringCoding String csn charsetName null ISO 8859 1 charsetName 这是 Linux jdk 7 中 Java lang getBytes 使用的内容 我