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

发布时间:2026/9/11 1:55:05

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/9/11 1:50:05

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/9/11 2:55:11

零售数据分析:识别未交易顾客的技术方案

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

2026/9/11 2:55:11

2026年白帽黑客笔记本怎么选?从CPU到内存的实战指南

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

2026/9/11 2:55:11

从 VSCode 扩展到 Electron 独立应用:打字游戏架构改造复盘

在 VSCode 里做打字练习插件做到第三版的时候,我越来越觉得不对劲:菜单栏是 VSCode 的,快捷键是 VSCode 的,甚至字体渲染都带着编辑器那股味道。用户想练打字,却要忍受编辑器自带的各种输入法冲突,还有那个…

2026/9/11 2:55:11

ArduPilot 抗干扰布线指南:让信号干扰不再困扰你的飞控

ArduPilot 抗干扰布线指南:让信号干扰不再困扰你的飞控 【免费下载链接】ardupilot ArduPlane, ArduCopter, ArduRover, ArduSub source 项目地址: https://gitcode.com/GitHub_Trending/ar/ardupilot 上周一次试飞,飞控刚离地十秒,航…

2026/9/11 2:50:10

SQL学习笔记:从基础语法到慢SQL优化的完整实战指南

SQL这门语言,很多人觉得就是“增删改查”四个字,背几个命令就能上手。可真到了工作中,面对一张张动辄几十个字段的表、嵌套三层起步的查询需求,以及时不时冒出来的慢查询告警,才发现当年“基础扎实”的自信根本经不起推…

2026/9/10 16:39:38

超人会飞不算本事:系统稳定依赖清晰规则与边界设计

开头先不绕弯子。“#斯坦李吐槽dc 所以超人是无缘无故会飞的嘛哈哈哈哈哈哈哈锤哥真是技术人才啊!#雷神 #复联”这类调侃式短标题,第一波冲击力在于它把两个宇宙的角色塞进同一个吐槽箱里,但细想一下就能发现,它真正碰到的根本不是…

2026/9/10 11:16:38

超人VS蜘蛛侠:拆解超级IP的影响力与传播方法论

把“蜘蛛侠 vs 超人”放在 CSDN 上聊,可能很多人第一反应是走错片场了。但如果把这两个角色看成“两个持续运营了 80 多年的文化产品”,你会发现,这场比较本质上是两个不同 IP 策略的长期结果对比:超人赢在定义了整个超级英雄题材…

2026/9/9 16:31:09

基于CNN的调制信号识别:MATLAB实现时频图分类实战

简介:本资源是一套面向通信工程与信号处理方向学习者、研究者的深度学习实践方案,聚焦调制信号自动检测与识别这一典型无线通信任务,解决传统方法依赖人工特征、低信噪比下性能下降等痛点。压缩包共12个文件(10.73MB)&…

2026/9/10 12:32:02

USB Type-C PCB布局分区设计:电源、高速信号与PD协议全攻略

做硬件这行,Type-C接口算是典型的“看着简单,做起来全坑”的东西。光引脚就24个,高低速信号、电源、控制线全部塞在一个小小的连接器里,如果PCB布局不做规划,打样回来基本就是“插上没反应”、“高速掉线”、“静电一打…

2026/9/10 15:19:50

系统编程学习原型如何补齐稳定性边界

系统编程学习原型如何补齐稳定性边界预算有限时&#xff0c;我先优化明显多余的复制&#xff0c;而不是猜测性地换容器。用借用传递只读数据通常就能减少分配&#xff1a; fn parse(line: &str) -> Result<Item, Error> { /* ... */ }用基准确认热点确实在分配&am…

2026/9/10 15:49:53

雨花区哪家财务公司代理记账比较好?

在雨花区&#xff0c;企业处理财税事务常常面临诸多挑战&#xff0c;选择一家靠谱的财务公司至关重要。湖南巨勤财务管理咨询有限公司就是本地正规实体财税服务机构&#xff0c;深耕本地工商财税行业多年&#xff0c;熟悉当地工商局、税务局最新政策与申报流程。主营公司注册、…

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

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

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