C# IronPython 2.7重音字符(语法错误例外)

C# IronPython 2.7重音字符(语法错误例外),c#,python,encoding,ironpython,non-ascii-characters,C#,Python,Encoding,Ironpython,Non Ascii Characters,我有一个C#应用程序,在其中我使用重音字符(ÀÈÏ等)运行Python脚本 为此,我使用铁蟒。我的脚本在Python3.5.1(空闲状态)下运行良好,但由于Iron Python将其作为Python2.7脚本执行,因此我的脚本无法运行 我读到应该是Unicode编码而不是Utf8编码,但我在谷歌上发现的唯一相关的事情是在字符串(即text=u'theText)之前加上一个u,或者使用Unicode()(即Unicode(theText))。两个都不起作用 我从IronPython.dll中得到错

我有一个C#应用程序,在其中我使用重音字符(ÀÈÏ等)运行Python脚本

为此,我使用铁蟒。我的脚本在Python3.5.1(空闲状态)下运行良好,但由于Iron Python将其作为Python2.7脚本执行,因此我的脚本无法运行

我读到应该是Unicode编码而不是Utf8编码,但我在谷歌上发现的唯一相关的事情是在字符串(即text=u'theText)之前加上一个u,或者使用Unicode()(即Unicode(theText))。两个都不起作用

我从IronPython.dll中得到错误:
'Microsoft.Scripting.SyntaxErrorException'

更具体地说:
第13行的pathToScript/cesar.py文件中的非ASCII字符'\xc3',但未声明编码

下面是我的Python脚本的简化版本,它执行凯撒密码“加密”:

下面是我在C#应用程序中如何称呼它:

ScriptEngine engine = Python.CreateEngine();

string pythonScriptPath = System.IO.Path.GetDirectoryName(System.IO.Path.GetDirectoryName(System.IO.Directory.GetCurrentDirectory()));
ScriptSource source = engine.CreateScriptSourceFromFile(pythonScriptPath + "/cesar.py");

ScriptScope scope = engine.CreateScope();
source.Execute(scope);

Object myclass = engine.Operations.Invoke(scope.GetVariable("WhateverName"));
object[] parameters = new object[] { text, number };
encryptedText += engine.Operations.InvokeMember(myclass, "rotateLetters", parameters);

那么,在这里,如何使Python脚本中的字母变量在Python 2.7环境(Iron Python)中工作?

可能是最有用的资源。tl;dr将
#-*-编码:utf-8-*-
(或任何您的编码)添加到file@AnthonySottile使用
#-*-编码:utf-8-*-
使我的IronPython不会崩溃,这很好,尽管我仍然得到了这些(� ) 当它是一个重音字符时,我将它从我的脚本中删除。我试图使用Unicode,这是我所读到的Python 3.X的默认值,但它表示未知编码:Unicode。另存为UTF-8。因此,无论我尝试的是UTF-8以外的其他编码类型,它都无法识别它,并将文件另存为UTF-8…知道为什么吗?作为补充说明,我尝试了latin-1和iso-8859-15将文档保存为这些编码格式,但任何ascii或unicode都不起作用,并将其保存为utf-8。在所有这些情况下,重音字符仍然无法正确识别(� ).您还需要
u''
为字符串添加前缀(使其成为文本字符串)。在python2中,字符串文本默认为字节literals@AnthonySottile我忘了提它,但我就是这么做的。但不管有没有前缀u,它都会保持不变�. 太长了,读不下去了吗?因为是我的意思,是因为我试图把它放在ASCII和Unicode中,但是,就像我说的,它不让我把这些(即<代码>××-*编码:Unicode -*-/Code >或<代码>×-*-编码:ASCII—*/<代码>可能是最有用的资源。(或无论您的编码是什么)到file@AnthonySottile使用
#-*-编码:utf-8-*-
使我的IronPython不会崩溃,这很好,尽管我仍然得到了这些(� ) 当它是一个重音字符时,我将它从我的脚本中删除。我试图使用Unicode,这是我所读到的Python 3.X的默认值,但它表示未知编码:Unicode。另存为UTF-8。因此,无论我尝试的是UTF-8以外的其他编码类型,它都无法识别它,并将文件另存为UTF-8…知道为什么吗?作为补充说明,我尝试了latin-1和iso-8859-15将文档保存为这些编码格式,但任何ascii或unicode都不起作用,并将其保存为utf-8。在所有这些情况下,重音字符仍然无法正确识别(� ).您还需要
u''
为字符串添加前缀(使其成为文本字符串)。在python2中,字符串文本默认为字节literals@AnthonySottile我忘了提它,但我就是这么做的。但不管有没有前缀u,它都会保持不变�. 这是因为
#-*-编码:utf-8-*-
是utf-8吗?因为我试图用ascii和unicode来表达它,但正如我所说,它不允许我用这些(即
#-*-编码:unicode-*-
#-*-编码:ascii-*-
ScriptEngine engine = Python.CreateEngine();

string pythonScriptPath = System.IO.Path.GetDirectoryName(System.IO.Path.GetDirectoryName(System.IO.Directory.GetCurrentDirectory()));
ScriptSource source = engine.CreateScriptSourceFromFile(pythonScriptPath + "/cesar.py");

ScriptScope scope = engine.CreateScope();
source.Execute(scope);

Object myclass = engine.Operations.Invoke(scope.GetVariable("WhateverName"));
object[] parameters = new object[] { text, number };
encryptedText += engine.Operations.InvokeMember(myclass, "rotateLetters", parameters);