new post: BBS BGK->UTF8

This commit is contained in:
dongdigua 2023-01-27 19:17:48 +08:00
parent dea495a7ab
commit 3527b0ae04
5 changed files with 126 additions and 23 deletions

82
org/bbs_gbk_utf8.org Normal file
View File

@ -0,0 +1,82 @@
#+TITLE: 支线任务: 中文 BBS GBK 转 UTF8
#+DESCRIPTION: 造轮子好玩
#+DATE: <2023-01-27 五>
我过年这两天在服务器运维群看到了 水木清华BBS 这个东西,
于是就 telnet 试了下, 发现字符集是 GBK!
emmm, 设置环境变量启动终端不行, 就得在 gnome-terminal 设置里面弄.
进去看了, 发现好多神奇的东西, 但整体还是没落, 现在还是虎年的欢迎页面...
接合我之前在 sdf.org, 新黑客词典, youtube 等地方看到的关于 BBS 的记忆片段,
使我开始考古这个从曾经那个时代来的我从没接触过的东西.
先解决客户端问题:
我在 Back To BBS 节目里面看到了 [[https://syncterm.bbsdev.net][Syncterm]] 和 [[http://www.mysticbbs.com/downloads.html][Netrunner]],
一个不支持中文, 一个根本无法启动 (cannot open display).
然后我找到了 qterm, 先是在水木 FreeBSD 版块看见的, 后来搜索 BBS 客户端时想起来了.
下下来试一下, 不错. 但是我不想为了这一个东西而装一个额外软件, 还得编译.
然后就想, 如果不能终端解码, 那为啥不先转换成 UTF8 再显示呢?
那就 iconv? 结果人家是全输入完 EOF 了才显示...
有没有方式能不缓冲而是 on-the-fly 呢? 搜索引擎没搜到.
那就自己写!
iconv 是基于 libiconv 库, 看看文档就能写了, 虽然我基本没写过 C 代码.
#+BEGIN_SRC c
#include <stdio.h>
#include <iconv.h>
#define UTF8_SIZE 4
int
convert_one(iconv_t cd)
{
char inbuf[2] = {0};
char outbuf[UTF8_SIZE] = {0};
size_t insize = 1;
size_t outsize = UTF8_SIZE;
char c = getchar();
if (c == EOF)
return 1;
inbuf[0] = c;
char * pIn = inbuf;
char * pOut = (char*) outbuf;
size_t iconv_result = iconv(cd, &pIn, &insize, &pOut, &outsize);
if (iconv_result == (size_t) -1) {
inbuf[1] = getchar();
insize = 2;
iconv(cd, &pIn, &insize, &pOut, &outsize);
}
for (int i = 0; i < UTF8_SIZE; i++) {
if (outbuf[i] != 0)
putchar(outbuf[i]);
fflush(stdout);
}
return 0;
}
int
main(void)
{
iconv_t cd = iconv_open("UTF8", "GBK");
while (1)
if (convert_one(cd) == 1) break;
iconv_close(cd);
return 0;
}
#+END_SRC
好使, 但是, 我写这篇文章的时候又过去看了眼那个帖子的回复, 发现有这个:
#+BEGIN_EXAMPLE
luit -encoding gbk <command>
#+END_EXAMPLE
嗯, 好使...
另一个帖子说 GNU screen 也可以,
然后搜索 screen 转码的时候看到了这个 [[https://wadarochi.github.io/2011/05/24/GNU-screen-encoding的替代品自制BBS转码脚本/][GNU screen encoding的替代品自制BBS转码脚本]]
*但自己造轮子还是很开心哈哈*

View File

@ -19,18 +19,20 @@
| "{register}y/p | 向/从寄存器拷贝 | | "{register}y/p | 向/从寄存器拷贝 |
** movement ** movement
| key | usage | | key | usage |
|----------+----------------------------| |----------+------------------------|
| w/e | 下一个单词/单词尾 | | w/e | 下一个单词/单词尾 |
| b | 单词头 | | b | 单词头 |
| H/M/L | 当前页面可见顶部/中间/底部 | | H/M/L | 当前页面可见顶部/中间/底部 |
| C-u(f)/d | 上/下翻页 | | C-u(f)/d | 上/下翻页 |
| % | 到对应括号 | | % | 到对应括号 |
| {} | 段落跳转 | | {} | 段落跳转 |
| g ; | goto last change | | g ; | goto last change |
| g */# | 正/反查找光标下的词 | | g */# | 正/反查找光标下的词 |
| g d/D | 跳转到本地/全局定义 | | g d/D | 跳转到本地/全局定义 |
| C-w | jump between splits | | C-w | jump between splits |
| C-o/i | Older/Newer position |
| ` | mark |
** file/split ** file/split
| key | usage | | key | usage |

View File

@ -2,6 +2,7 @@
#+TAGS: lowlevel(w) frontend(f) backend(b) algorithm(a) math(t) #+TAGS: lowlevel(w) frontend(f) backend(b) algorithm(a) math(t)
#+TAGS: hack(h) fun(u) wow(O) #+TAGS: hack(h) fun(u) wow(O)
#+TAGS: emacs(m) linux(x) iot(i) plan9(9) BSD(B) #+TAGS: emacs(m) linux(x) iot(i) plan9(9) BSD(B)
#+TAGS: smth
#+OPTIONS: toc:1 ^:{} #+OPTIONS: toc:1 ^:{}
#+TITLE: Internet Collections #+TITLE: Internet Collections
@ -13,13 +14,19 @@
/--\ \_ (/_ | |_ (_| | | | | | (_| (_| | (_ (_| | _|_ | | (_| (/_ >< /--\ \_ (/_ | |_ (_| | | | | | (_| (_| | (_ (_| | _|_ | | (_| (/_ ><
_| _|
#+END_SRC #+END_SRC
#+BEGIN_QUOTE
这才是互联网好玩的地方, 你总能在某个奇怪的角落发现神奇的东西
-- 我
#+END_QUOTE
* (Personal) Blogs * (Personal) Blogs
:PROPERTIES: :PROPERTIES:
:CUSTOM_ID: blog :CUSTOM_ID: blog
:END: :END:
#+TAGS: rssable(s) rssub(U) gopher(g) #+TAGS: rssable(s) rssub(U) gopher(g)
** Random Stuff Floating Around ** Random Stuff Floating Around
not related to the root blog entry (I don't know what I mean) not related to the root blog entry (I don't know what I mean, do you?)
*** [[https://www.luogu.com.cn/blog/ivystorm/emacs-adventuredunnet-tong-guan-jiao-cheng][luogu blog: emacs dunnet 教程]] :emacs: *** [[https://www.luogu.com.cn/blog/ivystorm/emacs-adventuredunnet-tong-guan-jiao-cheng][luogu blog: emacs dunnet 教程]] :emacs:
*** [[https://bheisler.github.io/post/state-of-gpgpu-in-rust/][The State of GPGPU in Rust]] :rust:lowlevel: *** [[https://bheisler.github.io/post/state-of-gpgpu-in-rust/][The State of GPGPU in Rust]] :rust:lowlevel:
*** [[https://secretgeek.github.io/html_wysiwyg/][巧用 CSS 显示 HTML 源码]] :frontend: *** [[https://secretgeek.github.io/html_wysiwyg/][巧用 CSS 显示 HTML 源码]] :frontend:
@ -234,8 +241,10 @@ int function(void) {
** [[https://ifaceless.github.io/2019/11/17/guide-to-linux-scheduler/][论文学习之 Linux 调度器]] ** [[https://ifaceless.github.io/2019/11/17/guide-to-linux-scheduler/][论文学习之 Linux 调度器]]
*** [[https://ifaceless.github.io/2019/10/30/linux-kernel-dev-notes/][Linux Kernel Development 学习与总结]] *** [[https://ifaceless.github.io/2019/10/30/linux-kernel-dev-notes/][Linux Kernel Development 学习与总结]]
** [[https://hardenedlinux.github.io][Hardened GNU/Linux]] :hack: ** [[https://hardenedlinux.github.io][Hardened GNU/Linux]] :hack:
** TODO [[https://briancallahan.net][Dr. Brian Robert Callahan]] :BSD:
*** [[https://briancallahan.net/blog/20220629.html][OpenBSD has two new C compilers: chibicc and kefir]] :smth:
** B ** B/HWS/fri3nds
*** [[https://shakaianee.top/][社会易姐]] *** [[https://shakaianee.top/][社会易姐]]
*** [[https://blog.yangmame.org/][yanemame]] *** [[https://blog.yangmame.org/][yanemame]]
猴哥推荐的 猴哥推荐的
@ -251,14 +260,22 @@ EvanMeek / B站: 美味的樱桃菌
**** [[https://sh.alynx.one/posts/Linux-Mooncake-Jokes/][Linux 用户的月饼食用手册]] :fun: **** [[https://sh.alynx.one/posts/Linux-Mooncake-Jokes/][Linux 用户的月饼食用手册]] :fun:
**** [[https://sh.alynx.one/posts/Do-Not-Fill-My-Email-with-Silly-Ads/][不要拿愚蠢的广告来污染我的邮箱]] **** [[https://sh.alynx.one/posts/Do-Not-Fill-My-Email-with-Silly-Ads/][不要拿愚蠢的广告来污染我的邮箱]]
**** [[https://sh.alynx.one/posts/Emacs-Monaco-Box-drawing-Character/][Emacs 和 Monaco 字体和 Box-drawing Character]] **** [[https://sh.alynx.one/posts/Emacs-Monaco-Box-drawing-Character/][Emacs 和 Monaco 字体和 Box-drawing Character]]
*** [[http://www.z.org.cn/][老网虫]]
*** [[https://blog.yang-qwq.ml][yang-qwq]]
*** [[http://blog.zhanganzhi.com/][zhanganzhi]]
*** [[https://blog.bluemangoo.net/][芒果快评]]
今年的新博客, 友链有踏浪
*** [[https://acyanbird.github.io][山奈]]
** ZhiHu ** ZhiHu
*** [[https://zhuanlan.zhihu.com/p/138719668][用Go语言汇编计算fibonacci数列]] :lowlevel: *** [[https://zhuanlan.zhihu.com/p/138719668][用Go语言汇编计算fibonacci数列]] :lowlevel:
*** [[https://www.cnblogs.com/zjjws/p/13346020.html][第 N 个质数]] :c:algorithm: *** [[https://www.cnblogs.com/zjjws/p/13346020.html][第 N 个质数]] :c:algorithm:
看不懂, 先收藏着 看不懂, 先收藏着
*** [[https://www.zhihu.com/column/c_1313110231912726528][倔强的程序员]] *** [[https://www.zhihu.com/column/c_1313110231912726528][倔强的程序员]]
编! 译! 原! 理! 编! 译! 原! 理!
*** [[https://www.zhihu.com/column/c_185117725][专栏: 技术考古]] :plan9: *** [[https://www.zhihu.com/column/c_185117725][专栏: 技术考古]] :wow:plan9:
plan9 **** [[https://web.archive.org/web/20220423091317/https://zhuanlan.zhihu.com/p/502733643][archive: 那些古老又优美的 GUI]] :smth:
***** [[https://guidebookgallery.org][GUI Gallery]]
*** [[https://www.zhihu.com/column/roartalk][专栏: 嘶吼RoarTalk]] :hack: *** [[https://www.zhihu.com/column/roartalk][专栏: 嘶吼RoarTalk]] :hack:
回归最本质的信息安全 回归最本质的信息安全
*** [[https://zhuanlan.zhihu.com/p/464565089][我抵制Notepad++的理由]] *** [[https://zhuanlan.zhihu.com/p/464565089][我抵制Notepad++的理由]]
@ -279,12 +296,6 @@ use the power of tor:
*** [[https://www.zhihu.com/question/306745383][ubuntu重启变成了debian怎么办?]] *** [[https://www.zhihu.com/question/306745383][ubuntu重启变成了debian怎么办?]]
U boom tu U boom tu
** shenjack/HWS/fri3nds
*** [[http://www.z.org.cn/][老网虫]]
*** [[https://blog.yang-qwq.ml][yang-qwq]]
*** [[http://blog.zhanganzhi.com/][zhanganzhi]]
*** [[https://blog.bluemangoo.net/][芒果快评]]
今年的新博客, 友链有踏浪
* YouTube (没有账号, 这就是我的收藏夹) * YouTube (没有账号, 这就是我的收藏夹)
:PROPERTIES: :PROPERTIES:
@ -404,11 +415,12 @@ to filing patently fraudulent DMCA counter-notifications to avoid the terminatio
**** [[https://youtu.be/2CnAzLB0OjU][DT: As The Web Grows Bigger, It Seems Smaller]] **** [[https://youtu.be/2CnAzLB0OjU][DT: As The Web Grows Bigger, It Seems Smaller]]
*** [[https://youtu.be/Rsxao9ptdmI][Beating 5 Scam Arcade Games with Science]] *** [[https://youtu.be/Rsxao9ptdmI][Beating 5 Scam Arcade Games with Science]]
街机科学家~ 街机科学家~
*** [[https://youtube.com/playlist?list=PLgE-9Sxs2IBVgJkY-1ZMj0tIFxsJ-vOkv][BBS The Documentary(8)]]
*** [[https://youtu.be/k35uDHs7Z9E][DT: A Disturbing Descent Into The Mind Of A Mad Man]] *** [[https://youtu.be/k35uDHs7Z9E][DT: A Disturbing Descent Into The Mind Of A Mad Man]]
*** [[https://youtu.be/GlovVvBAIGk][DT: Keeping A Positive Attitude Even After Storm Destroys My Backyard]] *** [[https://youtu.be/GlovVvBAIGk][DT: Keeping A Positive Attitude Even After Storm Destroys My Backyard]]
*** [[https://www.youtube.com/@lecturesbywalterlewin.they9259][Lectures by Walter Lewin. They will make you ♥ Physics]] :wow: *** [[https://www.youtube.com/@lecturesbywalterlewin.they9259][Lectures by Walter Lewin. They will make you ♥ Physics]] :wow:
*** [[https://youtu.be/dIivJwz5jL8][Nyan Cat piano arrangement sight-read by Tom Brier]] *** [[https://youtu.be/dIivJwz5jL8][Nyan Cat piano arrangement sight-read by Tom Brier]]
*** [[https://www.youtube.com/playlist?list=PLop3s1hMlSJKXqmuFjK7gbJh2WAyllTTY][Back to the BBS]]
**** [[https://www.erb.pw][homepage]]
* r * r
:PROPERTIES: :PROPERTIES:
@ -441,6 +453,8 @@ to filing patently fraudulent DMCA counter-notifications to avoid the terminatio
Huwawei NB! Huwawei NB!
** [[https://lkml.org/lkml/2007/7/27/426][Linus re SD]] ** [[https://lkml.org/lkml/2007/7/27/426][Linus re SD]]
** [[https://marc.info/?l=openbsd-tech&m=167374666324119&w=2][openbsd-tech: xonly on amd64: testing wanted]] ** [[https://marc.info/?l=openbsd-tech&m=167374666324119&w=2][openbsd-tech: xonly on amd64: testing wanted]]
** [[https://lists.freebsd.org/pipermail/freebsd-current/2003-July/006889.html][freebsd : Annoucning DragonFly BSD!]]
** [[https://minnie.tuhs.org/pipermail/tuhs/2022-April/025643.html][TUHS: Sad News - we last two wonderful people in the past few weeks]]
* Other * Other
:PROPERTIES: :PROPERTIES:

View File

@ -109,6 +109,7 @@ grub> boot
然后就是安装一堆软件 然后就是安装一堆软件
我没有安装那些 "现代化 UNIX 工具", 比如 htop bat exa zoxide, (ripgrep 除外, 太好用了) 我没有安装那些 "现代化 UNIX 工具", 比如 htop bat exa zoxide, (ripgrep 除外, 太好用了)
7z 真的好用, 但是我觉得更应该学学标准的 UNIX 压缩解压工具
#+BEGIN_SRC ksh #+BEGIN_SRC ksh
doas pkg_add firefox neovim git pcmanfm noto-cjk # 特别必要的 doas pkg_add firefox neovim git pcmanfm noto-cjk # 特别必要的
doas pkg_add ripgrep fzf ncdu neofetch ranger p7zip colortree # 好用的工具 doas pkg_add ripgrep fzf ncdu neofetch ranger p7zip colortree # 好用的工具
@ -313,7 +314,9 @@ iwx0 at pci0 dev 20 function 3 "Intel Wi-Fi 6 AX201" rev 0x20, msix
:CUSTOM_ID: btrfs :CUSTOM_ID: btrfs
:END: :END:
我有时候会想访问 Linux 上的文件, 但是似乎不支持 btrfs... 我有时候会想访问 Linux 上的文件, 但是似乎不支持 btrfs...[fn:13]
** [[https://dongdigua.github.io/bbs_gbk_utf8][支线任务: 中文 BBS GBK 转 UTF8]]
* Footnotes * Footnotes
@ -333,6 +336,7 @@ iwx0 at pci0 dev 20 function 3 "Intel Wi-Fi 6 AX201" rev 0x20, msix
[fn:10] https://www.openbsd.org/faq/faq4.html#SendDmesg [fn:10] https://www.openbsd.org/faq/faq4.html#SendDmesg
[fn:11] FAQ: dmesg archive https://www.mail-archive.com/misc@openbsd.org/msg162300.html [fn:11] FAQ: dmesg archive https://www.mail-archive.com/misc@openbsd.org/msg162300.html
[fn:12] NYC*BUG dmesgd https://dmesgd.nycbug.org/index.cgi [fn:12] NYC*BUG dmesgd https://dmesgd.nycbug.org/index.cgi
[fn:13] Accessing Other Filesystems https://www.openbsd.org/faq/faq14.html#foreignfs
* Related Links * Related Links
:PROPERTIES: :PROPERTIES:

View File

@ -1,5 +1,6 @@
## Table of Contents ## Table of Contents
### Posts (sorted by time) ### Posts (sorted by time)
- [支线任务: 中文 BBS GBK 转 UTF8](bbs_gbk_utf8)<br>
- [我要不要试试 OpenBSD](whatif_openbsd)<br> - [我要不要试试 OpenBSD](whatif_openbsd)<br>
- [一个乐子 commit](lol.diff.txt)<br> - [一个乐子 commit](lol.diff.txt)<br>
- [一次大备份](backup_everything)<br> - [一次大备份](backup_everything)<br>