LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 795|回复: 5

在DOS下打印出表格的程序在Bash显示成乱码

[复制链接]
发表于 2005-2-24 10:37:48 | 显示全部楼层 |阅读模式
在DOS下用ASCII码大于128的字符可以打印出表格,而在bash中执行时好像受到locale的控制显示成乱码,如何才能解决这一问题呢?
发表于 2005-2-24 11:19:08 | 显示全部楼层
这个好像比较难,Linux下的扩展字符和DOS下定义不一样吧。

不如改程序,用 |  -- 这样的标准ASCII字符,在哪都能用。
回复 支持 反对

使用道具 举报

发表于 2005-2-25 01:10:42 | 显示全部楼层
这个问题其实还是有意思的。为什么ncurses可以使用这些字符来画窗口呢?
因为还是编程的问题,需要设置终端什么的。
回复 支持 反对

使用道具 举报

发表于 2005-2-25 09:17:20 | 显示全部楼层
找到制表符号了,但不知道是否和DOS一样。试试下面的程序:

  1. #include <stdlib.h>
  2. #include <stdio.h>

  3. int main()
  4. {
  5.         int i;

  6.         printf("\x1b(0");                //切换到特殊图形字符集

  7.         for (i=106; i<121; i++) {
  8.                 printf("%c", i);
  9.         }
  10.         printf("\n");

  11.         printf("\x1b(B");                //切回到ACSII字符集

  12.         return 0;
  13. }
复制代码

WARNING:不要丢了切回到ASCII字符集那一句,否则终端显示就全乱了!
回复 支持 反对

使用道具 举报

 楼主| 发表于 2005-2-28 22:30:07 | 显示全部楼层
我对C不熟
printf("\x1b(0");
这一行中 \x1b(0 表示的是什么?用其他语言能替代吗?
还有 printf("\x1b(B");
谢了
回复 支持 反对

使用道具 举报

发表于 2005-3-1 08:28:08 | 显示全部楼层
这与C语言无关,这是VT100终端的控制码。意义就是注释中所说的字符集切换。其他语言也可以,只要能把控制字符输出到终端。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表