curl `--use-ascii`(`-B`)选项详解:FTP/TFTP 文本传输模式的完整指南

发布时间:2026/11/9 12:14:21

curl `--use-ascii`(`-B`)选项详解:FTP/TFTP 文本传输模式的完整指南 curl--use-ascii-B选项详解FTP/TFTP 文本传输模式的完整指南【免费下载链接】curlA command line tool and library for transferring data with URL syntax, supporting DICT, FILE, FTP, FTPS, GOPHER, GOPHERS, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, MQTT, MQTTS, POP3, POP3S, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET, TFTP, WS and WSS. libcurl offers a myriad of powerful features项目地址: https://gitcode.com/GitHub_Trending/cu/curl本篇技术指南围绕 curl 命令行的--use-ascii短选项-B展开系统讲解该选项在 FTP、TFTP 与 LDAP 等协议中开启 ASCII文本传输模式的作用机制、与 URL 内置扩展;typeA、;modenetascii的关系、在 Win32 平台下对标准输出的特殊影响并结合 curl 源码lib/ftp.c、lib/tftp.c、lib/setopt.c与命令行参数解析实现src/tool_getparam.c揭示其底层实现原理。读完本文你将能够准确判断何时使用--use-ascii、如何通过 URL 后缀等效开启 ASCII 模式以及它与--crlf、--data-ascii等关联选项的协同关系。一、选项总览-B, --use-ascii--use-ascii是 curl 内置的布尔型开关选项其官方定义如下见 docs/cmdline-opts/use-ascii.md属性值短选项-B长选项--use-ascii帮助文本Use ASCII/text transfer适用协议FTP、LDAP、TFTP分类ftp、output、ldap、tftp引入版本5.0极早期版本即已存在取值类型boolean布尔开关默认值关闭false该选项在 curl 命令行参数表中的注册代码位于 src/tool_getparam.c{use-ascii, ARG_BOOL, B, C_USE_ASCII},ARG_BOOL意味着它同时支持--no-use-ascii形式来显式关闭布尔选项的通用反转语法在 src/tool_getparam.c 中解析结果被直接写入全局配置结构体case C_USE_ASCII: /* --use-ascii */ config-use_ascii toggle;该字段定义于 src/tool_cfgable.hBIT(use_ascii); /* select ASCII or text transfer */而 src/tool_listhelp.c 中的帮助条目则与文档中的 Help 文本保持一致供curl --help与curl --manual输出使用。基本用法# 通过 FTP 以 ASCII 模式下载文件 curl -B ftp://example.com/README # 等价的长选项写法 curl --use-ascii ftp://example.com/README # 显式关闭虽然默认就是关闭 curl --no-use-ascii ftp://example.com/README文档给出的规范示例即为-B ftp://example.com/README见 docs/cmdline-opts/use-ascii.md。二、FTP 协议下的 ASCII 模式2.1 行为含义在 FTP 协议中文件传输分为 ASCII 与二进制IMAGE两种模式。ASCII 模式下客户端与服务器之间的换行符会按 RFC 959 规范进行转换LF 与 CRLF 相互映射二进制模式则对字节流不做任何改写适合图片、压缩包、可执行文件等。curl 文档明确说明对于 FTP也可以通过使用以;typeA结尾的 URL 来等效开启 ASCII 模式。即下面两条命令行为等价curl -B ftp://example.com/README curl ftp://example.com/README;typeA同理;typeI用于强制二进制模式;typeD用于请求目录列表。2.2 源码实现type_url_check()URL 后缀;typetypecode的解析实现在 lib/ftp.c 的type_url_check()函数中static void type_url_check(struct Curl_easy *data, struct FTP *ftp) { size_t len strlen(ftp-path); /* FTP URLs support an extension like ;typetypecode that * we will try to get now! */ if((len 7) !memcmp(ftp-path[len - 7], ;type, 6)) { char *type ftp-path[len - 7]; char command Curl_raw_toupper(type[6]); *type 0; /* cut it off */ switch(command) { case A: /* ASCII mode */ >my_setopt_long(curl, CURLOPT_TRANSFERTEXT, config-use_ascii);而 lib/setopt.c 中的选项处理代码说明了它的历史沿革与最终落点case CURLOPT_TRANSFERTEXT: /* * This option was previously named FTPASCII. Renamed to work with * more protocols than merely FTP. * * Transfer using ASCII (instead of BINARY). */ s-prefer_ascii enabled; break;关键信息有两点该选项前身名为FTPASCII后来为了支持 FTP 之外的协议而改名为TRANSFERTEXT——这正是它同时适用于 TFTP 的原因它最终把prefer_ascii状态位写入 easy handle 的运行时状态s-prefer_ascii。2.4 对 FTP 会话流程的实际影响prefer_ascii在 FTP 状态机中驱动TYPE A/TYPE I命令的发送在获取文件信息SIZE之前lib/ftp.c 会先调用ftp_nb_type()设置正确的传输类型因为“某些服务器对不同的模式返回不同的文件大小”必须先把类型设对再去取 SIZE在正式传输前同样会通过ftp_nb_type(data, ftpc, ftp, prefer_ascii, ...)发出TYPE A或TYPE I命令见 lib/ftp.c 与 lib/ftp.c在数据传输后的换行处理上lib/ftp.c 的注释揭示了 ASCII 模式与--crlf选项的协作关系当crlf或prefer_ascii被置位时curl 会在数据流上执行 CRLF 转换maybe CRLF conv反之则不做转换no conversion。从源码结构看ASCII 模式在 FTP 上既影响控制通道的TYPE命令协商也影响数据通道的换行符转换是贯穿 FTP 会话全程的模式标志。三、TFTP 协议下的 netascii 模式3.1 行为含义TFTP 协议定义了三种传输模式netascii文本、octet二进制即 8 位原始字节、mail已废弃。curl 文档说明对于 TFTP也可以通过使用以;modenetascii结尾的 URL 来等效开启 ASCII 模式curl -B tftp://example.com/README curl tftp://example.com/README;modenetascii3.2 源码实现TFTP 的 URL 后缀解析位于 lib/tftp.c/* TFTP URLs support a trailing ;modenetascii or ;modeoctet */ if((len 14) !memcmp(path[len - 14], ;modenetascii, 14)) { ... } else if((len 11) !memcmp(path[len - 11], ;modeoctet, 11)) { ... }而模式选择发生在发送第一个请求包RRQ/WRQ之前lib/tftp.c 中的tftp_send_first()函数static CURLcode tftp_send_first(struct tftp_conn *state, tftp_event_t event) { size_t sbytes; ssize_t senddata; const char *mode octet; char *filename; ... /* Set ASCII mode if -B flag was used */ if(data-state.prefer_ascii) mode netascii;这段代码与文档一一对应默认模式是octet一旦-B被使用prefer_ascii为真请求包中携带的模式就切换为netascii。模式枚举定义在 lib/tftp.cTFTP_MODE_NETASCII 0,TFTP 的 netascii 模式同样包含换行符规范化语义发送方把\n转换为\r\n并处理\r后跟\n或\0的特殊情况接收方做反向转换。因此-B在 TFTP 上适用于纯文本文件的传输而二进制文件必须使用默认的octet模式。四、LDAP 与 Win32 平台的文本模式输出4.1 LDAP 协议文档将 LDAP 列入该选项的适用协议Protocols 字段包含 FTP、LDAP、TFTP。LDAP 查询返回的数据本身是文本性质的LDIF 格式因此--use-ascii可以用于确保相关场景下采用文本处理路径。从源码结构看LDAP 相关实现位于 lib/ldap.c 与 lib/openldap.c该选项的文本语义与这些协议的纯文本数据性质一致。4.2 Win32 平台的 stdout 文本模式文档特别强调该选项会导致在 Win32 系统上发送到 stdout 的数据处于文本模式text mode。这是--use-ascii在 Windows 平台上的一个平台特定副作用在 Win32 的 C 运行时中标准输出默认可能处于文本模式此时输出流中的\n会被转换为\r\n若希望 stdout 按原始字节输出例如下载二进制数据并通过管道交给其他程序则不应开启--use-ascii保持默认的关闭状态。该行为与 curl 的 Windows 平台适配代码src/tool_doswin.c、lib/system_win32.c相关。在 Unix/Linux 系系统上则没有这一区分stdout 始终按字节原样输出。五、与关联选项的协同与区别文档的 See-also 字段指向两个关联选项5.1--crlf--crlf将本地换行符转换为 CRLF。二者的关系体现在 lib/ftp.c 的传输数据转换逻辑中crlf与prefer_ascii都会触发 CRLF 转换路径但语义不同--use-ascii请求服务器以 ASCII 模式传输FTP 的TYPE A、TFTP 的netascii是协议层的模式协商--crlf仅要求 curl 在本地数据流上做换行转换不涉及与服务器的模式协商。详情见 docs/cmdline-opts/crlf.md。5.2--data-ascii--data-ascii用于 HTTP POST 的-d数据家族指定数据以 ASCII 方式发送。它与--use-ascii共享 ascii 命名空间但属于完全不同的功能域HTTP 请求体编码 vs FTP/TFTP 传输模式。详情见 docs/cmdline-opts/data-ascii.md。六、实战要点总结什么时候用--use-ascii通过 FTP/TFTP 传输纯文本文件脚本、配置、文档且需要服务器端换行符转换时。二进制文件压缩包、图片、可执行文件切勿使用必须保持默认的二进制模式。URL 后缀是等效的替代写法FTP;typeAASCII、;typeI二进制默认、;typeD目录列表TFTP;modenetascii文本、;modeoctet二进制默认注意 URL 中的后缀需要引号包裹避免 shell 把;解释为命令分隔符。底层机制命令行开关与 URL 后缀最终都汇聚到 libcurl 内部的prefer_ascii状态经CURLOPT_TRANSFERTEXT设置见 lib/setopt.c再由各协议实现消费——FTP 发送TYPE A命令并执行 CRLF 转换TFTP 在 RRQ/WRQ 中携带netascii模式。平台差异在 Win32 上开启该选项还会把 stdout 切换为文本模式管道重定向二进制数据时需注意。布尔开关特性作为ARG_BOOL类型它支持--no-use-ascii显式关闭适合在配置文件或脚本中做开关控制参见 docs/cmdline-opts/config.md 中布尔选项的通用写法。七、参考与延伸阅读选项定义文档docs/cmdline-opts/use-ascii.md命令行参数解析C_USE_ASCII分支见 src/tool_getparam.c参数表注册见 src/tool_getparam.c配置结构体字段src/tool_cfgable.h工具层→库层选项对接src/config2setopts.c库层选项处理CURLOPT_TRANSFERTEXTlib/setopt.cFTP;typeURL 解析lib/ftp.cFTP 换行转换逻辑lib/ftp.cTFTP netascii 模式选择lib/tftp.c、URL;mode解析lib/tftp.c关联选项文档docs/cmdline-opts/crlf.md、docs/cmdline-opts/data-ascii.md帮助文本输出实现src/tool_listhelp.c【免费下载链接】curlA command line tool and library for transferring data with URL syntax, supporting DICT, FILE, FTP, FTPS, GOPHER, GOPHERS, HTTP, HTTPS, IMAP, IMAPS, LDAP, LDAPS, MQTT, MQTTS, POP3, POP3S, RTSP, SCP, SFTP, SMB, SMBS, SMTP, SMTPS, TELNET, TFTP, WS and WSS. libcurl offers a myriad of powerful features项目地址: https://gitcode.com/GitHub_Trending/cu/curl创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/11/8 12:41:52

2026年3000-4000元平板选购指南:避开触控延迟与系统协同陷阱

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/11/5 14:17:48

量子光学入门:从经典到量子的光场理论

1. 量子光学课程导论:为什么我们需要对光进行量子化?作为一名在量子光学领域工作多年的研究者,我经常被学生问到这样一个问题:"为什么我们非要把经典的光学理论量子化?"这确实是个好问题。在传统光学课程中&…

2026/11/9 12:10:41

考电工证分等级吗良心建议别再怕考不过白交培训费

考电工证分等级吗良心建议别再怕考不过白交培训费 怕考不过白交培训费?别慌,考电工证分等级吗?这个问题很多人一上来就问,尤其是刚下定决心报名的你,心里没底、怕交了钱白搭。作为干了十年的应急管理行业老手,我得说句良心建议:…

2026/11/9 12:10:41

电工证分为哪三种官方报名入口在哪

电工证分为哪三种官方报名入口在哪 证书过期了不知道怎么复审延期?别慌,这事儿我见过太多人踩坑了。今天咱们就聊聊【电工证分为哪三种】这事儿,再顺带讲讲怎么通过【官方报名入口】搞定复审延期。如果你是洛阳涧西区转岗的从业者,这文章对你来说绝对有干…

2026/11/9 12:10:41

电工证手机怎么查看上岗必备的实操考试怎么准备

电工证手机怎么查看上岗必备的实操考试怎么准备 实操考试心里没底怕挂科,特别是对初次报考的人来说,电工证手机怎么查看、考试内容、题型安排这些信息都得提前搞清楚,不然一上考场就慌了。电工证是上岗必备的,很多工地、企业、工厂都要求持证上岗,没有证…

2026/11/9 12:10:41

唐河电工证考试时间官方报名入口怎么选?实操考试心里没底怕挂科

唐河电工证考试时间官方报名入口怎么选?实操考试心里没底怕挂科 实操考试心里没底怕挂科,唐河电工证考试时间你搞清楚了吗?很多学员在报名前最担心的,就是不知道具体考试时间安排,怕错过节点,也怕考试内容不熟悉,一不小心就挂科。尤其是像三门峡的在职…

2026/11/9 12:05:41

郑州特种工培训厂商怎么转异地?保姆级教程帮你避开实操考试雷区

郑州特种工培训厂商怎么转异地?保姆级教程帮你避开实操考试雷区 实操考试心里没底怕挂科,这几乎是每个想考特种作业证的学员心头的“大石头”。特别是对于刚毕业的应届生,像鹤壁的工程类毕业生,第一次接触这类考试,担心操作失误、流程不熟,更是焦虑不已…

2026/11/9 0:37:55

电工证丢失还能补吗?千万别踩坑,丢了证等于失业

电工证丢失还能补吗?千万别踩坑,丢了证等于失业 你正在找工作,但手里的电工证突然丢了,这下怎么办?别急,先别慌, 电工证丢失还能补吗 ?答案是肯定的,但 千万别踩坑 ,补办流程如果不了解,可能会耽误你上岗、甚至影响到你的收入。…

2026/11/9 0:03:09

建设厅的特种工有哪些含金量高?别交完钱考不过

建设厅的特种工有哪些含金量高?别交完钱考不过 怕考不过白交培训费?别急,先搞清楚建设厅的特种工有哪些含金量高的证,再决定是不是值得投入时间和金钱。 建设厅的特种工证是建筑行业里最基础、也最实用的证书之一,涉及多个作业类别,每种证的 含金量…

2026/11/9 0:03:09

荆门市电工证报名怎么考才靠谱 全国通用证别交冤枉钱

荆门市电工证报名怎么考才靠谱 全国通用证别交冤枉钱 怕考不过白交培训费?荆门市电工证报名前必须知道这些避坑指南。别看网上一堆培训机构广告,真要报个电工证,很多人被坑得一塌糊涂。特别是那些打着“包过”旗号的,最后不是考试不过,就是证不是全国通…

2026/11/9 0:03:09

高空电工作业过程通过率揭秘:怎么选靠谱机构不被坑

高空电工作业过程通过率揭秘:怎么选靠谱机构不被坑 不知道去哪报名怕被中介坑?你不是一个人。现在特种作业证报名渠道五花八门,从线下培训机构到线上代理,真假难辨。尤其是像高空电工作业这类高风险、高门槛的作业类型,证书含金量和考试通过率直接影响你…

2026/11/9 6:30:27

面向复杂光照与角度的宠物面部识别鲁棒性增强策略

在智慧养宠时代,基于视觉的宠物身份识别技术正逐步从实验室走向家庭应用。然而,与配合度高的人类不同,宠物是典型的“非合作生物识别对象”——它们不会主动配合摄像头调整姿态,更无法控制光照环境。实际应用中,我们常…

2026/11/7 14:50:12

SSM电子书店源码全解析:结构、原理、部署与排错实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑