Python HTML ASCII 和背景图像
我正在尝试创建一个Python脚本,目的是在网页上显示一个名为external-link-icon.gif
的图标作为背景,并使用合适的字体,打印出所有可以打印的ASCII字符。我们可以选择像Times New Roman、Palatino、Georgia、Lucida Grande或Helvetica这样的字体。可以打印的字符的十进制数字范围是33到126,以及128到4000,而127是不需要的。
我觉得我的代码应该没问题,但这个脚本却没有正常工作。我很确定背景部分做错了,而且我不确定自己使用的标签是否正确,或者是否缺少了一些标签,但我觉得ASCII部分是对的。
#!/usr/local/bin/python3
import base64
import binascii
import cgi
import sys
print('Content-type: text/html\n')
content = []
#back = []
external_link_bytes = open('external-link-icon.gif','rb').read()
# Create the base64 encoded images
external_link = base64.b64encode(external_link_bytes)
external_link = external_link.decode('ascii')
#back = '<style>body {background:url(data:image/gif;base64,%s)}</style>' % external_link
for i in range(33,127):
content.append('<div class="unicode-char">')
char = cgi.escape(chr(i)).encode("ascii", "xmlcharrefreplace")
content.append(char.decode())
content.append('<div class="clearfix"></div><sub style="font-size: 12px">{sub_number}</sub>'.format(sub_number = i))
content.append('</div>')
for i in range(128,256):
content.append('<div class="unicode-char">')
char = cgi.escape(chr(i)).encode("ascii", "xmlcharrefreplace")
content.append(char.decode())
content.append('<sub style="font-size: 12px">{}</sub>'.format(i))
content.append('</div>')
for i in range(257,4000):
content.append('<div class="unicode-char">')
char = cgi.escape(chr(i)).encode("ascii", "xmlcharrefreplace")
content.append(char.decode())
content.append('<sub style="font-size: 12px">{}</sub>'.format(i))
content.append('</div>')
content = "\n".join(content)
更新:我在脚本中添加了这个,因为我需要把ASCII字符显示成12行的列,并设置特定的字体和字体大小,但又一次没有成功。我觉得我可能做错了,因为我的教授没有深入讲解,也没有给我们很多例子。
html = '<!doctype html>'
html += '<html>'
html += '<head>'
html += '<meta charset="utf-8">'
html += '<title>Lab 5.1.cgi</title>'
html += '<style>'
html += body {font-family: "WenQuanYi", "Arial Unicode MS", "GNU Unifont", Code2000, Arial, "Lucida Grande", sans-serif; background:url(data:image/gif;base64, external_link)};
html += '</style>'
html += '</head>'
html += '<body>'
html += '<div class="row">'
html += '<div class="twelve columns">'
html += '<div class="globalWrapper">'
html += '<div style="font-size:16px">'
html += '</div>'
html += '<div><strong>lab5.1.cgi</strong>'
html += '<h1 class="title">Arial Unicode MS</h1>'
html += '<h2 class="small">Printable Characters: 32–126, 128 – 4000</h2>'
html += '<div class="unicode-char">'
html += content
html += '</div>'
html += '</div>'
html += '</div>'
html += '</body>'
html += '</html>'
print (html)
1 个回答
0
首先,给你的脚本添加一个叫做 cgitb
的错误追踪管理器,这样任何错误都会在浏览器中显示出来:
import cgitb
cgitb.enable()
现在,如果你的CGI设置正确,至少可以运行你的脚本,你就能在浏览器中看到错误反馈了。
你的 back
赋值不是有效的Python代码:
back = <style>body {background:url(data:image/gif;base64,external_link)}</style>
在这里你需要使用字符串格式化:
external_link = external_link.decode('ascii')
back = '<style>body {background:url(data:image/gif;base64,%s)}</style>' % external_link
base64.b64encode()
的结果是一个 bytes
类型的值,所以你需要先把它解码成 str
类型的值。
根据CGI服务器如何处理当前工作目录,可能会找不到 external-link-icon.gif
文件。你可以通过使用脚本文件的位置作为起点来加载同一目录下的文件,以防这种情况发生:
import os
here = os.path.dirname(os.path.abspath(__file__))
icon_file = os.path.join(here, 'external-link-icon.gif')
with open(icon_file, 'rb') as infile:
external_link_bytes = infile.read()