Python.net没有从.net接收正确的编码字符串

问题描述

我正在使用.net 4.7.1控制台程序与VS2017报告的2.5.1.0版本(运行时版本v4.0.30319)的python.net进行通信,而Python代码在3.6中。

python:

def ping(input):
    if (input == 'ping'):
        return 'pong'
    return 'invalid'

def headervalid(header):
    if (header == '@\n\u001e\rANSI '):
        return True
    return False

if __name__ == '__main__':
    input = '@\n\u001e\rANSI '
    print(headervalid(input))
    input = 'ping'
    print(ping(input))

点网:

using (Py.GIL())
            {
                dynamic np = Py.Import("numpy");
                Console.WriteLine(np.cos(np.pi * 2));

                dynamic sin = np.sin;
                Console.WriteLine(sin(5));

                double c = np.cos(5) + sin(5);
                Console.WriteLine(c);

                dynamic a = np.array(new List<float> { 1,2,3 });
                Console.WriteLine(a.dtype);

                dynamic b = np.array(new List<float> { 6,5,4 },dtype: np.int32);
                Console.WriteLine(b.dtype);

                Console.WriteLine(a * b);

                dynamic parsers = Py.Import("newworld_parsers.bridgetest");

                string input = "ping";
                var result = parsers.ping(input);
                Console.WriteLine(result);
                input = @"@\n\u001e\rANSI ";
                result = parsers.headervalid(input);
                Console.WriteLine(result);

                Console.WriteLine("=======");
                Console.ReadLine();
            }

python独立运行报告:

True
pong
Press any key to continue . . .

点净运行报告:

1.0
-0.9589242746631385
-0.675262089199912
float64
int32
[ 6. 10. 12.]
pong
False
=== Press any key to continue ====

从C#调用时注意python中的True与False 点网的headervalid()中的特殊字符似乎未正确遍历。我应该怎么做才能解决这个问题?任何想法都非常感谢!

解决方法

在C#字符串的前面加上'@'字符将其转换为原始字符串,这意味着内部的任何转义序列均无效。

您可以通过在代码中添加Console.WriteLine(input);来看到这一点。