<div dir="ltr">I have a Py3k script, pasted below. When I run it I get an error about ASCII codecs that can't handle byte values that are too high.<div><br></div><div>The error that I am getting is:</div><div><br></div>
<div><pre class="" style="margin-top:0px;margin-bottom:10px;padding:5px;border:0px;font-size:13.600000381469727px;vertical-align:baseline;background-color:rgb(238,238,238);font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif;overflow:auto;width:auto;max-height:600px;color:rgb(0,0,0);line-height:17.600000381469727px">
<code style="margin:0px;padding:0px;border:0px;vertical-align:baseline;font-family:Consolas,Menlo,Monaco,'Lucida Console','Liberation Mono','DejaVu Sans Mono','Bitstream Vera Sans Mono','Courier New',monospace,serif"><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;color:rgb(43,145,175)">UnicodeEncodeError</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">:</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent"> </span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;color:rgb(128,0,0)">'ascii'</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent"> codec can</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;color:rgb(128,0,0)">'t encode character '</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">\u</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;color:rgb(128,0,0)">0161</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;color:rgb(128,0,0)">' in position 1442: ordinal not in range(128)
args = ('</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">ascii</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;color:rgb(128,0,0)">', "Content-Type: text/html\n\n<!DOCTYPE html>\n<html>\n...ype='</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">submit</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;color:rgb(128,0,0)">'>\n </form>\n </body>\n</html>", 1442, 1443, '</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">ordinal </span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;color:rgb(0,0,139)">not</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent"> </span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;color:rgb(0,0,139)">in</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent"> range</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">(</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;color:rgb(128,0,0)">128</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">)</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;color:rgb(128,0,0)">')
encoding = '</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">ascii</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;color:rgb(128,0,0)">'
end = 1443
object = "Content-Type: text/html\n\n<!DOCTYPE html>\n<html>\n...ype='</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">submit</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;color:rgb(128,0,0)">'>\n </form>\n </body>\n</html>"
reason = '</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">ordinal </span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;color:rgb(0,0,139)">not</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent"> </span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;color:rgb(0,0,139)">in</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent"> range</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">(</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;color:rgb(128,0,0)">128</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent">)</span><span class="" style="margin:0px;padding:0px;border:0px;vertical-align:baseline;background-color:transparent;color:rgb(128,0,0)">'
start = 1442
with_traceback = <built-in method with_traceback of UnicodeEncodeError object></span></code></pre></div><div style>(And that was posted to StackOverflow--one shot in the dark answer so far.)</div><div style><br>
</div><div style>My code is below. What should I be doing differently to be, in the most immediate sense, calls to '''%(foo)s''' % locals()?</div><div><pre style="color:rgb(0,0,0);word-wrap:break-word;white-space:pre-wrap">
#!/usr/bin/python3
import cgi
import cgitb;cgitb.enable()
import os
import pickle
import sys
cgi_form = cgi.FieldStorage()
message = ''
def get_cgi(field, default = ""):
return cgi_form.getfirst(field, default)
try:
sys.stderr.write('abc: 1')
input_file = open(
os.path.join(os.path.dirname(__file__), '../../../russian/pickled'), 'rb')
sys.stderr.write('abc: 2')
state = pickle.load(input_file)
sys.stderr.write('abc: 3')
state['changed'] = False
sys.stderr.write('abc: 4')
state['loaded'] = True
sys.stderr.write('abc: 5')
except IOError:
state = {}
state['phrases'] = []
state['changed'] = True
state['loaded'] = False
#except UnicodeDecodeError:
#state = {}
#state['phrases'] = []
#state['changed'] = True
state['loaded'] = False
if get_cgi('russian') and get_cgi('english'):
state['phrases'].append([get_cgi('russian'), get_cgi('english')])
message = 'Your changes have been saved.'
state['changed'] = True
elif get_cgi('english'):
state['phrases'].append([None, get_cgi('english')])
message = 'Your change has been saved.'
state['changed'] = True
if get_cgi('mode') == 'edit':
to_delete = []
for index in range(len(state['phrases'])):
if get_cgi('russian_' + str(index), None) != None:
state['phrases'][index][0] = get_cgi('russian_' + str(index))
if get_cgi('english_' + str(index), None) != None:
state['phrases'][index][1] = get_cgi('english_' + str(index))
if get_cgi('delete_' + str(index), None) != None:
to_delete.insert(0, index)
#to_delete.append(index)
#to_delete.sort(lambda a, b: -cmp(a, b))
for element in to_delete:
del state['phrases'][element]
state['changed'] = True
sys.stderr.write('abc: ' + repr(state))
if state['changed']:
output_file = open(
os.path.join(os.path.dirname(__file__), '../../../russian/pickled_new.' +
str(os.getpid())), 'wb')
pickle.dump(state, output_file)
output_file.close()
os.rename(
os.path.join(os.path.dirname(__file__), '../../../russian/pickled_new.' +
str(os.getpid())),
os.path.join(os.path.dirname(__file__), '../../../russian/pickled'))
if get_cgi('mode') == 'add':
print('''Content-type: text/html
<!DOCTYPE html>
<html>
<head>
<meta charset='UTF-8' />
<style type="text/css">
body
{
font-family: Verdana, Arial, sans;
}
input[type=text]
{
width: 100%%;
}
div.message
{
background-color: silver;
}
</style>
</head>
<body>
<div class='message'>
%(message)s
</div>
<form action='' method='POST'>
<p><strong>Russian:</strong><br />
<input type='text' id='russian' name='russian'></p>
<p><strong>English:</strong><br />
<input type='text' id='english' name='english'></p>
<p><input type='submit'>
</form>
<script src='/include/jquery.js'></script>
<script>
jQuery('#Russian').focus();
</script>
</body>
</html>''' % locals())
elif get_cgi('mode') == 'edit':
edit_table = '<table>'
edit_table += '<thead>'
edit_table += '<th>Russian</th>'
edit_table += '<th>English</th>'
edit_table += '<th>Delete</th>'
edit_table += '</thead>'
edit_table += '<tbody>'
for index in range(len(state['phrases'])):
if state['phrases'][index][0]:
russian = state['phrases'][index][0].replace('"', "''")
else:
russian = None
english = state['phrases'][index][1].replace('"', "''")
edit_table += '<tr>'
edit_table += '<td>'
if russian != None:
edit_table += '''<input type='text' name='russian_%(index)d'
id='russian_%(index)d' value="%(russian)s">''' % locals()
edit_table += '</td>\n'
edit_table += '<td>'
edit_table += '''<input type='text' name='english_%(index)d'
id='english_%(index)d' value="%(english)s">''' % locals()
edit_table += '<td>'
edit_table += '''<input type='checkbox' name='delete_%(index)d'
id='delete_%(index)d'>''' % locals()
edit_table += '</td>\n'
edit_table += '</tr>'
print ('''Content-Type: text/html
<!DOCTYPE html>
<html>
<head>
<title>Edit Phrases</title>
<meta charset='utf-8' />
</head>
<body>
<form action='' name='edit' id='edit' />
<input type='hidden' name='mode' value='edit' />
%(edit_table)s
<input type='submit'>
</form>
</body>
</html>''' % locals())
else:
text = ''
for phrase in state['phrases']:
if phrase[0]:
text += ('<p title="' + phrase[1].replace('"', "''") + '">' +
phrase[0] + '</p>')
else:
text += '<h2>' + phrase[1] + '</h2>'
print ('''Content-type: text/html
<!DOCTYPE html>
<html>
<head>
<title>___________</title>
<meta charset='utf-8'>
<style type='text/css'>
body
{
font-family: Verdana, Arial, sans;
}
div
{
background-color: #ffff00;
}
</style>
<link rel='stylesheet' type='text/css'
href='/js/jquery-ui-1.10.2.custom/css/smoothness/jquery-ui-1.10.2.custom.css'
/>
</head>
<body>
%(text)s
<script src='/js/vendor/jquery-1.8.2-min.js'></script>
<script
src='/js/jquery-ui-1.10.2.custom/js/jquery-ui-1.10.2.custom.min.js'></script>
<script>
jQuery(document).tooltip();
</script>
</body>
</html>''' % locals())</pre><div><br></div>-- <br><div dir="ltr"><table cellpadding="0" cellspacing="0" style="font-family:Verdana,Arial,sans;font-variant:small-caps"><tbody><tr><td style="padding:20px">
<a href="http://jonathanscorner.com/" target="_blank"><img src="http://jonathanscorner.com/images/signature.png" height="88" width="100" border="0" alt="Christos Jonathan Hayward"></a></td><td style="padding:20px 20px 20px 0px">
<div style="margin-bottom:8px">Christos Jonathan Hayward, an Orthodox Christian author.</div><div style="margin-top:2px;margin-bottom:8px;padding:4px 6px;background-color:rgb(255,255,170);border:1px solid silver"><p style="margin:0px">
<span style="color:silver"><strong><a href="http://amazon.com/author/cjshayward" target="_blank">Amazon</a></strong> <a href="http://jonathanscorner.com/author/" title="Author biography" target="_blank">Author Bio</a></span><span style="font-size:small;color:silver"> </span><span style="font-size:small;color:rgb(192,192,192)"> <b><a href="http://cjsh.name/" style="color:rgb(17,85,204)" target="_blank">Author Site</a></b></span><span style="color:silver"> <strong><a href="mailto:christos.jonathan.hayward@gmail.com" title="christos.jonathan.hayward@gmail.com" target="_blank">Email</a></strong> <a href="http://www.facebook.com/christos.jonathan.hayward" title="@christos.jonathan.hayward" target="_blank">Facebook</a> <a href="http://fan.cjshayward.com/" title="Facebook fan page" target="_blank">Fan Page</a> <a href="http://jonathanscorner.com/plus" title="@Christos Jonathan Hayward" target="_blank">Google Plus</a> <a href="http://www.linkedin.com/in/jonathanhayward" title="@jonathanhayward" target="_blank">LinkedIn</a> </span><span style="color:rgb(192,192,192)"></span><span style="color:silver"> </span><strong style="color:silver"><a href="http://jonathanhayward.com/" target="_blank">Professional</a></strong><span style="color:silver"> </span><a href="http://twitter.com/JonathansCorner" title="@JonathansCorner" target="_blank">Twitter</a><span style="color:silver"> </span><strong style="color:silver"><a href="http://jonathanscorner.com/" title="JonathansCorner.com" target="_blank">Web</a></strong><span style="color:silver"> </span><a href="http://jonathanscorner.com/" title="New creations added to the website." target="_blank">What's New?</a></p>
</div><div style="margin-bottom:8px">If you read just <strong>one</strong> of my books, you'll want <strong><a href="http://www.amazon.com/dp/1478219912" target="_blank">The Best of Jonathan's Corner</a></strong>.</div>
</td></tr></tbody></table></div>
</div></div>