从文件中读取特殊字符 - Java

2024-02-04

我正在从具有以下属性的文本文件中读取数据:

编码:ANSI
文件类型:电脑

现在,该文件包含许多特殊字符,例如度数符号(°)等。我正在使用以下代码读取该文件:

File file = new File("C:\\X\\Y\\SpecialCharacter.txt");
BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(file), "UTF-8"));

如果文件编码是 ANSI,则上述代码无法正确读取特殊字符,例如:文件中的行:
“降低热量并煮沸直至产品内部温度达到 165°F”,reader.readLine()会输出:
“降低热量并煮沸直至产品内部温度达到 165°F”

当我将文件的编码更改为 UTF-8 时,该行按文件中的原样读取,而不会弄乱特殊字符。

我的问题是,数据在什么时候会变得混乱?当将数据存储在文件中时还是从文件中读取数据时?在记事本中打开文件会正确显示所有特殊字符。这是怎么发生的?

十六进制转储输出:

          -0 -1 -2 -3  -4 -5 -6 -7  -8 -9 -A -B  -C -D -E -F

00000000- 4C 6F 77 65  72 20 68 65  61 74 20 61  6E 64 20 73 [Lower heat and s]
00000001- 69 6D 6D 65  72 20 75 6E  74 69 6C 20  70 72 6F 64 [immer until prod]
00000002- 75 63 74 20  72 65 61 63  68 65 73 20  69 6E 74 65 [uct reaches inte]
00000003- 72 6E 61 6C  20 74 65 6D  70 65 72 61  74 75 72 65 [rnal temperature]
00000004- 20 6F 66 20  31 36 35 BA  46                       [ of 165.F       ]

“ANSI”不是一个特定的编码 - 它是一个整体收藏的编码。您需要使用right读取文件时的编码。例如,您完全有可能正在使用Windows-1252 http://en.wikipedia.org/wiki/Windows-1252编码,这意味着你may想尝试传入“Cp1252”作为编码名称。

事实上,您传递的是“UTF-8”isn't通常称为 ANSI 的编码之一。您需要找出文件使用的确切编码,然后在InputStreamReader范围。

我的问题是,数据在什么时候会变得混乱?当将数据存储在文件中时还是从文件中读取数据时?

假设编码能够表示您感兴趣的所有字符,只有当您读取文件时才会如此。基本上,您试图将其视为采用一种编码来读取,而实际上它采用的是另一种编码。记事本要么正在执行某种启发式编码检测,要么恰好使用正确的默认值对于这种特殊情况.

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

从文件中读取特殊字符 - Java 的相关文章

随机推荐

  • Ivy:使用动态修订

    我在理解如何使用动态修订版时遇到问题Ivy http ant apache org ivy 在我的 Java 项目中有效 目前 我有以下布局 lib a revision 1 0 0 status release dependencies
  • Powershell启动作业同步输出

    我有一个启动作业的 powershell 脚本 start job scriptblock while true echo Running Start Sleep 2 然后它继续执行脚本的其余部分 该工作是一种对该进程 PID 的监控工作
  • Apache 用户帐户无密码访问服务器 - Ubuntu

    我有同样的问题this https stackoverflow com questions 9089350 rsync via php exec with ssh passwordless ssh login问题 如果我再解释一遍 我可以使
  • 前向声明类成员的前向声明

    是否可以前向声明一个在另一个前向声明的类中声明的类 基本上 我有这样的东西 A h class A struct B 现在我想声明另一个这样的类 Q h class A struct A B class Q A B Foo 不 这是不可能的
  • 在 WordPress 中获取类别 ID 数组?

    cats get categories array order gt ASC orderby gt id hierarchical gt 0 hide empty gt 0 taxonomy gt edu year 我想生成一个变量 其中包
  • 当作为 *.a 静态库链接时,为什么“WinMain”无法解析?

    给定一个简单的程序 include
  • 如何将 PHPUnit 与 CodeIgniter 结合使用?

    我读过并阅读过有关 PHPUnit SimpleTest 和其他单元测试框架的文章 他们听起来都很棒 我终于让 PHPUnit 与 Codeigniter 一起工作了 感谢https bitbucket org kenjis my ciun
  • 默认模板参数在部分特化上下文中的作用

    我不清楚部分专业化背景下默认模板参数的交互 以选择哪个是更好的匹配模板 这个问题源于此中发布的代码answer https stackoverflow com questions 52565407 use of enable if to m
  • Jenkins Slave 问题 - 无效的流标头:099EACED

    Jenkins 2 7 4 安装在 RedHat 服务器中 并且通过选择 通过在主服务器上执行命令来启动代理 选项来配置 Linux 从站 我们创建了一个 Shell 脚本 它在 Jenkins 版本 2 7 4 中运行良好 现在我们将 J
  • “这个”阴影是个好主意吗?

    隐藏类变量的情况在 Java 中很常见 Eclipse 将愉快地生成以下代码 public class TestClass private int value private String test public TestClass int
  • 将数据库设置从 application.ini 中取出并放入环境中

    在基于 Zend 的应用程序的传统编码中 数据库设置存储在 application ini 中 这会存储每个应用程序的设置 StackOverflow 上是否有人探索过将数据库设置从 application ini 移动到环境中的可能性 例
  • Picasso 库无法在 Android 上从 SD 卡加载图像

    我从图像库的路径中获取一个文件 并尝试将其加载到图像视图 如下所示 文件路径为 storage sdcard0 DCIM Camera 1436267579864 jpg 我也尝试传递 Uri 我也有 SD 卡的读取权限 它最终在onErr
  • 如何通过IP获取时区[重复]

    这个问题在这里已经有答案了 我有一个注册 通过它我可以获得注册用户的IP地址 我想通过用户的 IP 地址获取用户的时区 就像在 jquery 中我们可以得到这样的结果jquery 中的时区 http pellepim bitbucket o
  • 如何获取 .NET 中的资源监视器值?

    我需要获取 Windows 7 资源监视器中的一些值 特别是每个进程的内存使用情况 CPU 和带宽 我研究了 PerformanceCounter 类 但没有找到深入到进程级别的方法 资源监视器正是我正在寻找的东西 在你问之前 我知道这是重
  • raise StopIteration 和生成器中的 return 语句有什么区别?

    我很好奇使用之间的区别raise StopIteration and a return生成器中的语句 例如 这两个函数有什么区别吗 def my generator0 n for i in range n yield i if i gt 5
  • 安装 pydev 时出错[重复]

    这个问题在这里已经有答案了 我安装了 eclipse 3 7 并且想从 help gt install new software 从 pydev org updates 安装 pydev 但我不断收到错误 An error occurred
  • Python描述符与属性[重复]

    这个问题在这里已经有答案了 我对何时使用属性和描述符感到困惑 我读到属性是一个专门的描述符 有人可以发布这是如何工作的吗 您应该阅读有关描述符实际是什么的文档 Cliff s Notes 版本 描述符是一种低级机制 可让您挂钩正在访问的对象
  • Rails 5 资产未在生产中加载

    我最近更新了 Rails 应用程序中的一些软件包 但现在我的资产无法提供服务 相反 我收到以下错误 Failed to load resource the server responded with a status of 404 Not
  • 制作 VB-dll 并将其加载到 C++ 应用程序中

    我有一个问题已经困扰了整整一周 但我自己无法解决 我一直在谷歌搜索 并在各种论坛中搜索 我发现了很多 这可能有用 尝试过 但没有 没有成功 如果有人有任何线索 请帮助我 我从外部源获得了许多用 VB 编写的类和函数 我需要能够在 C 应用程
  • 从文件中读取特殊字符 - Java

    我正在从具有以下属性的文本文件中读取数据 编码 ANSI文件类型 电脑 现在 该文件包含许多特殊字符 例如度数符号 等 我正在使用以下代码读取该文件 File file new File C X Y SpecialCharacter txt