JLine 的编码问题

2024-04-18

Jline https://github.com/jline/jline3/issues是一个用于在用户按下之前在控制台拦截用户输入的模块Enter。它使用 JNA 或类似的魔法。

我正在用它做一些实验,当我输入更多“异国情调”的 Unicode 字符时,我遇到了编码问题。这里的操作系统是W10,我使用的是Cygwin。这也是 Groovy 中的内容,但对于 Java 人员来说应该是显而易见的。

def terminal = org.jline.terminal.TerminalBuilder.builder().jna( true ).system( true ).build()
terminal.enterRawMode()
// NB the Terminal I get is class org.jline.terminal.impl.PosixSysTerminal
def reader = terminal.reader()

def bytes = [] // NB class ArrayList
int readInt = -1
while( readInt != 13 && readInt != 10 ) {
    readInt = reader.read()
    byte convertedByte = (byte)readInt
    // see what the binary looks like:
    String binaryString = String.format("%8s", Integer.toBinaryString( convertedByte & 0xFF)).replace(' ', '0')
    println "binary |$binaryString|"
    bytes << (byte)readInt // NB means "append to list"
    println ">>> read |$readInt| byte |$convertedByte|"
}
// strip final byte (13 or 10)
bytes = bytes[0..-2]
println "z bytes $bytes, class ${bytes.class.name}"
def response = new String( (byte[])bytes.toArray(), 'UTF-8' )
// to get proper out encoding for Cygwin I then need to do this (I have no idea why!)
def psOut = new PrintStream(System.out, true, 'UTF-8' )
psOut.print( "using PrintStream: |$response|" )

这适用于单字节 Unicode,并且像“é”(2 字节)这样的字母可以很好地处理。但是“ẃ”就出了问题:

ẃ --> Unicode U+1E83 
    UTF-8 HEX: 0xE1 0xBA 0x83 (e1ba83) 
    BINARY: 11100001:10111010:10000011

实际上,当您输入“ẃ”时,它输出的二进制文件是 11100001:10111010:10010010.

这会翻译为 U+1E92,这是另一个波兰字符“Ẓ”。这确实是打印出来的response String.

不幸的是 JLine 包给了你这个reader,这是类org.jline.utils.NonBlocking$NonBlockingInputStreamReader...所以我真的不知道我可以做些什么来调查它的编码(我假设UTF-8)或以某种方式修改它...任何人都可以解释问题是什么吗?


据我所知,这与 Cygwin 特定的问题有关,按照要求然后由我回答 https://stackoverflow.com/questions/41945010/cygwin-encoding-difficulties一年前。

有一个解决方案,在我的答案 https://stackoverflow.com/a/50027676/595305对于我在这之后直接提出的问题...它正确地处理 Unicode 输入,即使在基本多语言平面之外,使用 JLine,...并使用 Cygwin 控制台...希望如此。

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

JLine 的编码问题 的相关文章

  • Python。短语表示,如何改变?

    我不知道这个短语中存在的编码是什么 我也想知道这个问题的答案 主要是 我想改变我的措辞 例如 你好世界 变成你好 20世界 0A 老天啊 变成ol C3 A1 20mundo 0A 0A 我想要一个 python 解决方案 如果我有 gt
  • 同一服务器上的许多应用程序具有相同的 JMX Mbean 类

    我有超过 5 个 Spring Web 应用程序 它们都在使用另一个通用库 这个公共库有它自己的 MBean 由于强制的唯一 objectName 约束 我的应用程序无法部署在同一服务器上 我使用 MBean 的方式是这样的 Managed
  • 使用 proguard 混淆文件名

    我正在使用 proguard 和 Android Studio 混淆我的 apk 当我反编译我的apk时 我可以看到很多文件 例如aaa java aab java ETC 但我项目中的所有文件都有原始名称 有没有办法混淆我的项目的文件名
  • Kafka - 如何同时使用过滤器和过滤器?

    我有一个 Kafka 流 它从一个主题获取数据 并且需要将该信息过滤到两个不同的主题 KStream
  • Java中Gson、JsonElement、String比较

    好吧 我想知道这可能非常简单和愚蠢 但在与这种情况作斗争一段时间后 我不知道发生了什么 我正在使用 Gson 来处理一些 JSON 元素 在我的代码中的某个位置 我将 JsonObject 的 JsonElements 之一作为字符串获取
  • java中如何知道一条sql语句是否执行了?

    我想知道这个删除语句是否真的删除了一些东西 下面的代码总是执行 else 是否删除了某些内容 执行此操作的正确方法是什么 public Deleter String pname String pword try PreparedStatem
  • JOOQ 忽略具有默认值的数据库列

    看来JOOQ完全忽略了数据库列的默认值 既不会更新 ActiveRecord 对象 也不会在 INSERT 时跳过此列 相反 它尝试将其设置为 NULL 这在 NOT NULL 列上失败 Example CREATE TABLE bug f
  • 为什么该字符串的长度比其中的字符数长?

    这段代码 string a abc string b A C Console WriteLine Length a 0 a Length Console WriteLine Length b 0 b Length outputs Lengt
  • 为什么 jar 执行的通配符在 docker CMD 中不起作用?

    我有一个Dockerfile与以下CMD启动我的 Spring Boot 应用程序 FROM java 8 jre CMD java jar app file jar 当我尝试从创建的图像启动容器时 我得到 Error Unable to
  • JAXB - 忽略元素

    有什么方法可以忽略 Jaxb 解析中的元素吗 我有一个很大的 XML 文件 如果我可以忽略其中一个大而复杂的元素 那么它的解析速度可能会快很多 如果它根本无法验证元素内容并解析文档的其余部分 即使该元素不正确 那就更好了 例如 这应该只生成
  • 在 Spring 中为 @Pathvariable 添加类级别验证

    在发布这个问题之前 我已经做了很多研究并尝试了很多可用的解决方案 这是我陷入的棘手情况 我有一个 Spring 控制器 它有多个请求映射 它们都有 PathVariables 控制器如下所示 Controller EnableWebMvc
  • 如何更改 Swagger-ui URL 前缀?

    我正在使用 Springfox Swagger2 和 Spring boot 1 5 9 我可以通过此链接访问 swagger UI http localhost 8090 swagger ui html http localhost 80
  • MySQL 将 ÅäÖ 视为 AAO?

    这两个查询给了我完全相同的结果 select from topics where name Harligt select from topics where name H rligt 这怎么可能 看起来mysql在搜索时会将 翻译成aao
  • Android 认为我没有关闭数据库!为什么?

    我有一个 SQLiteDatabase 数据成员 我在 onCreate 中初始化它 并在 onPause onStop 和 onDestroy 中调用 close 它在 onResume 中重新初始化 它似乎运行得很好 但当我查看调试器时
  • 数据库中的持久日期不等于检索日期

    我有一个具有 Date 属性的简单实体类 此属性对应于 MySQL 日期时间列 Entity public class Entity Column name start date Temporal TemporalType TIMESTAM
  • Joshua Bloch 的构建器设计模式有何改进?

    早在 2007 年 我就读过一篇关于 Joshua Blochs 所采用的 构建器模式 的文章 以及如何修改它以改善构造函数和 setter 的过度使用 特别是当对象具有大量属性 其中大部分属性是可选的 时 本文对此设计模式进行了简要总结
  • 如何使用 Jersey 将嵌套列表封送为 JSON?我得到一个空数组或一个包含数组的单元素字典数组

    我正在开发一个使用 Jersey 将对象转换为 JSON 的项目 我希望能够写出嵌套列表 如下所示 data one two three a b c 我想要转换的对象首先将数据表示为 gt gt 我认为 Jersey 会做正确的事情 以上输
  • Lombok 不适用于 Eclipse Neon

    我下载了lombok jar lombok 1 16 14 jar 并将其放入我的下载中 然后我点击这个 jar 执行正确地识别了我的 MacOS 上的 Eclipse 实例 然后我选择了我想要的实例 Lombok也在pom xml中指定
  • 我所有的 java 应用程序现在都会抛出 java.awt.headlessException

    所以几天前我有几个工作Java应用程序使用Swing图书馆 JFrame尤其 他们都工作得很好 现在他们都抛出了这个异常 java awt headlessexception 我不知道是什么改变了也许我的Java版本不小心更新了 谢谢你尽你
  • 用于请求带有临时缓存的远程 Observable 的 RxJava 模式

    用例是这样的 我想暂时缓存最新发出的昂贵的Observable响应 但在它过期后 返回到昂贵的源Observable并再次缓存它 等等 一个非常基本的网络缓存场景 但我真的很难让它工作 private Observable

随机推荐

  • 在AngularJS中使用包含base64数据的变量加载图像src

    使用包含变量加载图像base64AngularJS 中的数据 我正在尝试找到从包含的变量加载图像源的正确方法base64编码图像数据 例如使用从画布中提取toDataURL 起初我只是尝试这样 img src image dataURL 其
  • Web 应用程序可以使用个人电话发送短信吗

    我有一个客户每月发送大约 5000 条 SMS 消息 他们目前正在 iPhone 上执行此操作 方法是将消息实际输入到手机中 我认为这些信息相当重复 并且通常是针对群体的 他们不使用在线消息网关的原因纯粹是成本 我们可以在澳大利亚使用网关
  • 动态创建 iframe 并为其附加 onload 事件

    我动态创建了一个 iframe 并添加了src归因于它 然后我将此 iframe 附加到页面正文中 知道我想附上onload向 iframe 发送事件以读取 iframe 内容 有人可以建议我该怎么做吗 frame document cre
  • 并发写入向量

    我知道可以同时读取std vector没有 坏 后果 因为这个操作可以被认为是线程安全的 但对于写操作却不能这样说 但是 我想知道这是否并不总是正确的 例如考虑到我的特定情况 我有一个std vector
  • 如何在不更改 equals 和 hashcode 的情况下插入集合

    我正在寻找建议 我有一个Person具有字符串firstName和字符串lastName的类 当我试图插入具有相同字符串的列表值时 例如 set add new Person firstName lastName set add new P
  • 代表当前登录到单独 Web 客户端的用户从 API 访问 MS Graph

    我正在开发一个 API ASP NET Core 可以通过单独托管的 Web 客户端 React 访问 两者都作为应用程序服务托管在 azure 上 客户端应用程序必须具有基于azure Ad的身份验证 单租户 最好由基于aad的azure
  • Bash:向带有空格的字符串添加额外的单引号

    当我尝试将参数作为变量传递给 bash 中的任何命令时 如果变量值有空格 我可以看到 bash 添加了额外的引号 我正在创建一个文件 some file txt 并将其添加到变量 file 中 我正在使用 file 并将其存储在另一个变量
  • 是否有必要将每个 ManagementObject 都处理掉?

    我注意到ManagementObject is IDisposable 但它也是从ManagementClass GetInstances and ManagementObjectSearcher Get 这是否意味着我需要处理遇到的每个对
  • MongoDB 将我的数据库自动设置为“测试”。如何改变呢?

    mongoose connect process env DATABASE URL useNewUrlParser true const MyModel mongoose model mymodel new Schema name Stri
  • WebBrowser 控件:“指定的转换无效。”

    我使用 WebBrowser 控件导航到 WordPress 博客的登录页面 页面加载正常 但每当我尝试从线程访问 WebBrowser 时 我得到一个特定的强制转换无效的异常 另外 在调试时 一切都会冻结大约 5 秒 调试时 我尝试访问控
  • 为什么 SpringJUnit4ClassRunner.withAfterClasses 方法会出现神秘的 MultipleFailureException 错误消息

    为什么我的 Spring 测试设置失败并出现以下不太有用的错误消息 感谢所有建议 JUnit 输出 java lang NoClassDefFoundError org junit runners model MultipleFailure
  • Jquery/Ajax cookie pt2

    继上一个问题之后 上一个问题 https stackoverflow com questions 3916829 jquery ajax cookie 如果检测到 cookie 我似乎无法 触发 ajax 调用 cookie 肯定已设置 并
  • 表单中 PHP 复选框的内爆数组

    我已经查看了内爆数组的多个示例 但无法弄清楚为什么我看不到是否选中了多个复选框 我能否获得有关需要添加哪些代码以及在哪里添加的帮助 谢谢 PHP 代码 to email protected cdn cgi l email protectio
  • 离散连续概率分布

    认识到这可能是一个统计问题和编码问题 假设我使用 Distributions jl 创建了一个正态分布 using Distributions mydist Normal 0 0 2 有没有一种好的 直接的方法可以离散化这样的分布以获得 P
  • 使用包阴影符号

    例如 我有这个包定义 它遮蔽了 COMMON LISP LISTEN defpackage shadows use common lisp shadow listen export listen 然后我想使用另一个包中的这个包 比如说 de
  • 创建反应应用程序不拾取 .env 文件?

    我在用创建反应应用程序 https github com facebookincubator create react app引导我的应用程序 我添加了两个 env files env development and env product
  • 尝试将 GCC 特定的 asm goto 移植到 Clang

    我一直在尝试将一些 GNU 扩展转换为实际的标准 C 这样它就可以在 clang 上运行 知道标准 C 而不是 GNU 扩展 我有点不知所措 asm goto 1 STATIC KEY INITIAL NOP pushsection jum
  • Kendo 可排序:无法编辑可排序表内的文本输入

    我有以下可排序表 其中包含可排序行 http demos telerik com kendo ui sortable events http demos telerik com kendo ui sortable events tbody
  • 从 ElasticSearch 中的嵌套字段中删除对象

    ElasticSearch 中有没有一种方法可以删除嵌套字段数组中的一些对象 所以我有一个嵌套字段 它返回对象数组 我需要删除嵌套字段中的一些对象 是否可以在查询中这样做 或者我需要在我的代码中这样做 这些额外的嵌套文档是隐藏的 我们无法直
  • JLine 的编码问题

    Jline https github com jline jline3 issues是一个用于在用户按下之前在控制台拦截用户输入的模块Enter 它使用 JNA 或类似的魔法 我正在用它做一些实验 当我输入更多 异国情调 的 Unicode