【问题标题】:Python HTML ASCII and background imagePython HTML ASCII 和背景图片
【发布时间】:2014-09-18 02:16:59
【问题描述】:

我正在尝试创建一个 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&ndash;126, 128 &ndash; 4000</h2>'
html += '<div class="unicode-char">'
html += content
html += '</div>'
html += '</div>'
html += '</div>'
html += '</body>'
html += '</html>'
print (html)

【问题讨论】:

  • 你最好使用yattag之类的东西来构建html。
  • 从来没有听说过,所以我查了一下,看起来很有用,但由于我的教授从未教过我们如何做到这一点,我猜他希望我们用老式的方式来做,哈哈。谢谢你,我学到了一些新东西

标签: python html tags ascii gif


【解决方案1】:

首先:将cgitb traceback manager 添加到您的脚本中,以便任何错误仍然输出到您的浏览器:

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()

【讨论】:

  • @user3804711:back 的处理是我能找到的唯一明显错误。
  • @user3804711:考虑将import cgitbcgitb.enable() 添加到您的脚本(在顶部),以便您至少在浏览器中收到一条错误消息。当前工作目录可能不是您所期望的,因此找不到 external-link-icon.gif 文件。
  • 以为我会测试背景 .gif 是否是问题,但只是剥离了从 33-126 和 128-4000 获取所有 ascii 的脚本部分,所以基本上所有的 for 循环和内容列表。它可以工作,所以它必须在内容列表或那些循环中的某个地方
  • @user3804711:然后分块构建备份;当我尝试你的代码时它对我有用。
  • 哦,你让它工作了,你是怎么做到的。我不明白你说的分块备份是什么意思
猜你喜欢
  • 2010-09-25
  • 1970-01-01
  • 2019-10-08
  • 2013-05-23
  • 1970-01-01
  • 2014-01-15
  • 2014-09-22
  • 2012-03-29
相关资源
最近更新 更多