相关疑难解决方法(0)

Scala方法调用中括号的规则是什么?

是不是要列出一个将某些内容转换为List的方法?

如果是的话,为什么我不能用它括号?我必须在这里遗漏一些更基本的东西.

这是一个例子:

val l = Array(1,2,3).toList // works fine

val l = Array(1,2,3).toList() // gives the error below
Run Code Online (Sandbox Code Playgroud)

方法适用的参数不足:(n:Int)特征LinearSeqOptimized中的Int.未指定的值参数n.

scala

49
推荐指数
3
解决办法
1万
查看次数

在Java/Scala中将Unicode(CJK ExtB)字符转换为十进制NCR

我正在尝试将包含CJK ExtB计划中的Unicode字符的Java字符串转换为十进制NCR.

例如(你可以试试http://people.w3.org/rishida/tools/conversion/):

  • "游钖堃"应转换为 游鍚堃
  • "怀"应转换为 𧦧懷

这是我尝试过的(在Scala中):

def charToHex(char: Char) = "&#%d;" format(char.toInt)
def stringToHex (string: String) = string.flatMap(charToHex)

println (stringToHex("???")) // 游鍚堃
println (stringToHex("?"))   // ��懷
println ("?".toCharArray().length) // Why it is 3?
Run Code Online (Sandbox Code Playgroud)

如您所见,它在第一种情况下正确转换,三个unicode字符转换为三个NCR.

但在第二种情况下"怀",只有两个unicode字符,但Java/Scala似乎认为它是一个包含三个字符的字符串.

那么,这里发生了什么,我怎么能正确地转换第二个案例就像我提到的网站上的转换器一样?非常感谢.

更新:

  • 我的源代码文件使用的是UTF-8.
  • 这是"怀".toCharArray()的结果
    • char[] = ?, char.toInt = 55390
    • char[] = ?, char.toInt = 56743
    • char[] = ?, char.toInt = 25079

现在我想我知道发生了什么.字符""在UTF-16中编码为0xD85E 0xDDA7,它是4个字节而不是2个字节.因此在转换为char数组时需要2个元素,其中数据类型char只能表示2个字节.

java unicode scala character-encoding unicode-string

1
推荐指数
1
解决办法
2641
查看次数