Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala/特殊字符处理/如何打开m࿽;dchen到mä;陈?_Scala - Fatal编程技术网

Scala/特殊字符处理/如何打开m࿽;dchen到mä;陈?

Scala/特殊字符处理/如何打开m࿽;dchen到mä;陈?,scala,Scala,我有一个Scala Akka应用程序,在其中我使用ProcessBuilder在Futures中执行python脚本 不幸的是,特殊字符显示不正确,所以我得到的是而不是mädchen->m�德钦 (äöü -> �) 如果我通过命令行执行python脚本,我是否得到了正确的“mädchen”输出,因此我假设它与python脚本无关,而与Scala输入读取相关 Python爬行器: print("mädchen") val proc = Process("scrapy runspider spi

我有一个Scala Akka应用程序,在其中我使用ProcessBuilder在Futures中执行python脚本

不幸的是,特殊字符显示不正确,所以我得到的是而不是mädchen->m�德钦 (äöü -> �)

如果我通过命令行执行python脚本,我是否得到了正确的“mädchen”输出,因此我假设它与python脚本无关,而与Scala输入读取相关

Python爬行器:

print("mädchen")
val proc = Process("scrapy runspider spider.py")

var output : String = ""
val exitValue = proc ! ProcessLogger (
   (out) => if( out.trim.length > 0 )
     output += out.trim,
   (err) =>
     System.err.printf("e:%s\n",err)
)

println(exitValue) // 0 -> succ.
println(output)    // m�dchen -> should be mädchen

Scala:

print("mädchen")
val proc = Process("scrapy runspider spider.py")

var output : String = ""
val exitValue = proc ! ProcessLogger (
   (out) => if( out.trim.length > 0 )
     output += out.trim,
   (err) =>
     System.err.printf("e:%s\n",err)
)

println(exitValue) // 0 -> succ.
println(output)    // m�dchen -> should be mädchen

我已经试过很多想法,也读到字符串默认为UTF-8,所以我不知道为什么我会得到这些问号

我也尝试过,但没有成功:
var byteBuffer:byteBuffer=StandardCharsets.UTF_8.encode(output.toString())
val str=新字符串(output.toString().getBytes(),“UTF-8”)


更新:


这似乎是一个与windows相关的问题,下面的说明将解决这个问题:

Python文件的编码是什么?它显然不是UTF-8,因为在UTF-8中,
ä
被编码为两个字节,但您只得到一个问号。因此,您可以强制Scala读取任意多的UTF-8,但您还需要实际输入它UTF-8而不是其他东西。你能尝试将输出中的单个字符强制转换为
Int
并查看它们的值吗?另外,我相当确定JVM字符是UTF-16码点
新字符串(output.toString().getBytes(),“UTF-8”)
在我刚刚测试时对我有效。你可能想打印出字节数组并确保它是
byte[8]{109,-61,-92,100,99,104,101,110}
@texasbruce&@用户感谢您的回复,我得到了稍微不同的数字:字节[9]{109,-17,-65,-67,100,99,104,101,110}我使用的是Windows 10/我使用的是Windows 10/我使用的是Windows 10也许这是一个操作系统的问题也许是一个操作系统的问题也许是一个操作系统的问题也许是一个操作系统的问题也许是一个Windows 10 10/我使用的是Windows 10/我使用的是10/我使用的是10/我使用的是谢谢你的回复,我已经有了我的回复,我已经有了!我的回复,我有!我有!usr/usr/usr/usr/bin/bin/bin/bin/bin/bin/bin/bin/bin/bin/bin/bin/bin/bin/bin/env/env/env python python python python python python python python python python python(35)python\355 5 5五五五五五五五五五五天——编码——编码:编码:编码:utf-3-3编码:utf-3-3-3-5-3-3-3-3-5-5-5-3编码:utf-