从 R.NET 返回的 Unicode 字符

Unicode characters returning from R.NET

我正在 return 使用 R.NET 将字符向量从 R 中的函数转换为 C#。唯一的问题是 unicode 字符,例如希腊字母正在丢失。以下行给出了我正在使用的代码示例:

CharacterVector cvAll = results[5].AsList().AsCharacter();

其中 results 是由 R 函数 return 编辑的结果列表。这些字符也由 R 写入文本文件,并且在记事本和其他编辑器中显示良好。我能正确得到 R.Net 到 return 的字符吗?

看起来您 运行 遇到了 RDotNet 的未解决问题:https://github.com/jmp75/rdotnet/issues/25

Unicode 字符似乎还不受支持。我 运行 在调用 engine.CreateDataFrame() 方法时遇到了同样的问题。它 return 一个 DataFrame 我所有的重音字符串都错了。

虽然似乎有一个解决方法:调用 RDotNet 函数时,如果我给出以计算机默认编码 (Windows ANSI) 编码并从 UTF-8 转换而来的字符串(重要),R 会接受它们并将正确解释的重音字符串返回给 C#。我不完全知道它为什么会起作用......它可能与.Net使用的默认编码有关string是UTF-16。 (参见此处:http://csharpindepth.com/Articles/General/Strings.aspx),因此从 UTF-8 到默认 ANSI 的转换似乎有效。

这是一个丑陋的例子:当我构建一个 RDotNet DataFrame 时,我将 CharacterVector 中的所有字符串转换为 ANSI(来自 UTF-8)编码的字符串:

try 
{
    string[] colAsStrings = null;
    colAsStrings = Array.ConvertAll<object, string>(uneColonne, s => StringEncodingHelper.EncodeToDefaultFromUTF8((string)s));
    correctedDataArray[i] = colAsStrings;
    columnConverted = true;
}

这里是用于转换的静态方法:

public static string EncodeToDefaultFromUTF8(string stringToEncode)
{
    byte[] utf8EncodedBytes = Encoding.UTF8.GetBytes(stringToEncode);

    return Encoding.Default.GetString(utf8EncodedBytes);
}