我使用R.NET将一个字符向量从R中的函数返回给C#,唯一的问题是诸如希腊字母之类的unicode字符丢失了。下面的代码行给出了我正在使用的代码的示例:
CharacterVector cvAll = results[5].AsList().AsCharacter();其中,results是R函数返回的结果列表。字符也由R写入到文本文件中,它们在记事本和其他编辑器中显示良好。我能让R.Net正确地返回字符吗?
发布于 2018-12-25 00:18:11
看起来你遇到了一个关于RDotNet的公开问题:https://github.com/jmp75/rdotnet/issues/25
Unicode字符似乎还不受支持。我在调用engine.CreateDataFrame()方法时遇到了同样的问题。它确实返回了一个DataFrame,我所有强调的字符串都是错误的。
不过,似乎有一个解决办法:当调用RDotNet函数时,如果我给出了以我的计算机默认编码(Windows ANSI)编码并从UTF-8转换而来的字符串(重要),R接受它们,并将正确解释的强调字符串返回给C#。我不太清楚为什么它能工作……这可能与用于string的.Net的默认编码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);
}https://stackoverflow.com/questions/53870917
复制相似问题