如何在Django网页中打印C语言中0到255的ASCII字符?

2 投票
5 回答
4669 浏览
提问于 2025-04-17 02:53

我正在做一个学校的C语言作业。作业的具体要求是:

“写一个程序,打印出从0到255的整数以及对应的ASCII字符。”

实际的代码写起来很简单:

#include <stdio.h>

int main() {
    int i;

    for (i = 0; i <= 256; i++) {
        printf("%d --> %c\n", i, i);
    }
    return 0;
}

不过,我需要把这个输出显示在一个用Django做的网页上。我用gcc编译了这段代码(启用了-std=C99选项),输出结果很好。但是,在网页上却什么都不显示。我们的Django视图使用popen2来打开这个可执行文件,代码如下:

if os.path.isfile(file_sh):
    output = popen2.popen2(file_sh)[0].read()

而且这个页面已经测试过,能正常运行这个课程里的其他C代码。我在视图里加了一个打印语句,以确认代码的输出是否正确发送到浏览器,结果在终端上显示正常,但在浏览器上却完全不显示。实际上,浏览器上什么都没有显示。经过进一步检查,我发现这个页面的标签里根本没有任何内容,这个标签通常是用来显示代码输出的。我猜这可能和字符编码有关。有什么想法吗?

补充:我忘了提,在我的模板里,我用meta标签指定了字符编码为utf-8。

补充2:我有个朋友有一个版本,可以显示保存在Windows上的utf-8文本文件内容,链接是http://geekingreen.dyndns.org/week02/Assignment-5,但是如果他尝试用可执行文件的输出显示那个页面,他也遇到了和我一样的问题。

5 个回答

0

正如其他人所说的,你只需要使用正确的编码方式。

output = popen2.popen2(file_sh)[0].read().decode('cp1252')
0

值在128到255之间的原始字节不是有效的utf-8字符,所以这可能就是你的问题所在。你应该选择Ascii编码,而不是utf-8,因为你现在使用的就是utf-8。

1

哈哈,我找到了一种方法,至少可以让它在页面上显示出来,虽然字符显示得不太正确,但至少页面上有东西显示。

代码就是这么简单:

mystring = unicode(mystring, errors='replace')

补充:我找到了一种更好的方法

import chardet
chartype = chardet.detect(mystring)

# perhaps you may want to check the confidence that it is that encoding first?
# if chartype['confidence'] > 0.5 or something

mystring = mystring.decode(chartype['encoding']).encode('utf-8')

效果非常好,虽然还是有一些字符缺失,但比之前的方法显示的内容多了。

撰写回答