Похоже, вы столкнулись с открытой проблемой с RDotNet: https://github.com/jmp75/rdotnet/issues/25
Символы Юникода, похоже, еще не поддерживаются.Я столкнулся с той же проблемой при вызове метода engine.CreateDataFrame ().Он вернул 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);
}