面试题答案
一键面试错误产生的常见原因
- 编码不匹配:当试图以特定编码(如
ascii
)写入包含非该编码字符集字符(如中文字符)的文本时,就会产生该错误。因为ascii
编码只支持英文字母、数字和一些符号,无法表示中文字符。例如,若使用open('test.txt', 'w')
(默认以系统默认编码打开,可能是ascii
),写入'你好'
就会出错。 - 目标编码不支持某些字符:即使使用了更通用的编码如
utf - 8
,如果目标编码实际上无法处理某些特殊字符(虽然utf - 8
能处理大多数常见字符,但某些非常罕见的字符可能也会出问题),也可能出现此错误。不过这种情况相对较少。
解决该错误的方法
- 指定合适的编码:
在上述代码中,通过try: with open('test.txt', 'w', encoding='utf - 8') as f: f.write('你好') except UnicodeEncodeError: pass
encoding='utf - 8'
明确指定以utf - 8
编码打开文件,这样就可以正确写入中文字符。 - 对字符进行编码转换:
这里先将字符串s = '你好' encoded_s = s.encode('utf - 8') with open('test.txt', 'wb') as f: f.write(encoded_s)
'你好'
编码为utf - 8
字节序列,然后以二进制写入模式'wb'
打开文件并写入,避免了UnicodeEncodeError
。