首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >JLine编码问题

JLine编码问题
EN

Stack Overflow用户
提问于 2018-04-24 19:36:45
回答 1查看 344关注 0票数 2

杰林是一个模块,用于在用户按下Enter之前在控制台截取用户输入。它使用的是JNA或类似的魔法。

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

代码语言:javascript
复制
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字节)处理得很好。但“ẃ”却出了问题:

代码语言:javascript
复制
ẃ --> Unicode U+1E83 
    UTF-8 HEX: 0xE1 0xBA 0x83 (e1ba83) 
    BINARY: 11100001:10111010:10000011

实际上,当您输入"ẃ“时,它生成的二进制是ẃ。

这转化为U+1E92,这是另一个波兰字符,"Ẓ“。这确实是在response String中打印出来的。

不幸的是,JLine包给了您这个reader,它是org.jline.utils.NonBlocking$NonBlockingInputStreamReader类.所以我不知道我能做些什么来调查它的编码(我猜是UTF-8)或者以某种方式修改它.有人能解释一下问题出在哪里吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-04-27 07:50:06

据我所知,这与Cygwin特有的问题有关,这是被问到的,然后是一年前的由我回答

有一个解决方案,在我的回答中,我在这个问题之后直接提出的问题.它正确地处理Unicode输入,即使在基本的多语言平面之外,使用JLine,.用Cygwin控制台..。但愿能去。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50009594

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档