擅长:python、mysql、java
<p>我假设:</p>
<ul>
<li>你用的是Python2版本</li>
<li><code>QgsProject.instance().fileName()</code>是一个unicode字符串,包含一个EN-DASH(unicode char U+2013:–)它看起来像一个普通的破折号(unicode char U+2D:-),但它不存在于ASCII或任何通用的8bit字符集中。</li>
</ul>
<p>这个错误是正常的:在Python2中,unicode字符串到普通的8bit字符串的转换使用ASCII字符集。</p>
<p>解决方法:<br/>
可以使用显式编码,要求对未映射的字符使用<em>替换</em>字符:</p>
<pre><code>UriFile = proj.fileName().encode('ascii', 'replace')
</code></pre>
<p>至少你会看到冒犯的角色发生在哪里。</p>
<p>解决方案:</p>
<p>您应该使用完整的unicode处理(并使用Python3),或者确保处理的所有字符串都可以在当前字符集中表示(通常是latin1)</p>
<p>或者,如果在您的用例中有意义,您可以尝试使用UTF8编码,它可以成功地以1、2或3字节表示任何UNICODE字符:</p>
<pre><code>UriFile = proj.fileName().encode('utf8')
</code></pre>