Clips.NET编码问题。字符串西里尔事实不可读
Clips.NET encoding problem. String cyrillic facts are not readable
我正在尝试使用 CLIPS.NET 将我的 CLIPS 专家系统与 .Net 应用程序集成。问题是我使用的一些事实包括一些西里尔字符串。
当我将结果从 Clips 返回到 .Net 应用程序时。所有西里尔字符串都被打乱了(见下图)。
代码示例(这里的 fullName 里面有西里尔符号):
String findAllActiveMembers = "(find-all-facts ((?f Member )) (= ?f:isActive 1))";
MultifieldValue members = (MultifieldValue)clips.Eval(findAllActiveMembers);
foreach (FactAddressValue member in members) {
SymbolValue tag = (SymbolValue)member.GetSlotValue("tagName");
StringValue fullName = (StringValue)member.GetSlotValue("fullName");
this.factList.Items.Add(tag.Value + " " + fullName.Value);
}
我该怎么做才能正确获取它们? Clips IDE 6.4 工作正常并正确显示这些字符串
谢谢!
这是将 C UTF-8 字符串转换为 .NET 字符串的代码中的错误。要修复它,您需要更改 CLIPSNET_Values.cpp 文件中的 SingleFieldToPrimitiveValue 方法。替换这些行:
rv = gcnew StringValue(gcnew String(theCString));
.
.
.
rv = gcnew SymbolValue(gcnew String(theCString));
.
.
.
rv = gcnew InstanceNameValue(gcnew String(theCString));
有了这些:
rv = gcnew StringValue(gcnew String(theCString,0,strlen(theCString),UTF8Encoding::UTF8));
.
.
.
rv = gcnew SymbolValue(gcnew String(theCString,0,strlen(theCString),UTF8Encoding::UTF8));
.
.
.
rv = gcnew InstanceNameValue(gcnew String(theCString,0,strlen(theCString),UTF8Encoding::UTF8));
我正在尝试使用 CLIPS.NET 将我的 CLIPS 专家系统与 .Net 应用程序集成。问题是我使用的一些事实包括一些西里尔字符串。
当我将结果从 Clips 返回到 .Net 应用程序时。所有西里尔字符串都被打乱了(见下图)。
代码示例(这里的 fullName 里面有西里尔符号):
String findAllActiveMembers = "(find-all-facts ((?f Member )) (= ?f:isActive 1))";
MultifieldValue members = (MultifieldValue)clips.Eval(findAllActiveMembers);
foreach (FactAddressValue member in members) {
SymbolValue tag = (SymbolValue)member.GetSlotValue("tagName");
StringValue fullName = (StringValue)member.GetSlotValue("fullName");
this.factList.Items.Add(tag.Value + " " + fullName.Value);
}
我该怎么做才能正确获取它们? Clips IDE 6.4 工作正常并正确显示这些字符串
谢谢!
这是将 C UTF-8 字符串转换为 .NET 字符串的代码中的错误。要修复它,您需要更改 CLIPSNET_Values.cpp 文件中的 SingleFieldToPrimitiveValue 方法。替换这些行:
rv = gcnew StringValue(gcnew String(theCString));
.
.
.
rv = gcnew SymbolValue(gcnew String(theCString));
.
.
.
rv = gcnew InstanceNameValue(gcnew String(theCString));
有了这些:
rv = gcnew StringValue(gcnew String(theCString,0,strlen(theCString),UTF8Encoding::UTF8));
.
.
.
rv = gcnew SymbolValue(gcnew String(theCString,0,strlen(theCString),UTF8Encoding::UTF8));
.
.
.
rv = gcnew InstanceNameValue(gcnew String(theCString,0,strlen(theCString),UTF8Encoding::UTF8));