Manpages

名 称

dos2unix − DOS/Mac − Unix文 件 格 式 转 换 器

概 要

    dos2unix [选 项 ] [文 件  …] [−n 输 入 文 件  输 出 文 件  ...]
    unix2dos [选 项 ] [文 件  …] [−n 输 入 文 件  输 出 文 件  ...]

说 明

Dos2unix软 件 包 包 括 工 具 "dos2unix""unix2dos", 用 于 将 纯 文 本 文 件 在 DOS或 Mac格 式 与 Unix格 式 之 间 相 互 转 换 。

DOS/Windows的 文 本 文 件 中 , 断 行 符 是 由 两 个 字 符 共 同 表 示 的 : 回 车 符 ( CR) 和 换 行 符 ( LF) 。 Unix的 文 本 文 件 中 , 换 行 符 则 由 单 个 换 行 符 ( LF) 表 示 。 而 Mac的 文 本 文 件 则 由 单 个 回 车 符 ( CR, 用 于 Mac OS X之 前 的 系 统 ) 或 单 个 换 行 符 ( LF, 用 于 当 下 的 新 Mac OS) 表 示 。

除 了 断 行 符 , Dos2unix还 可 以 转 换 文 件 编 码 。 一 些 DOS编 码 页 可 以 被 转 换 为 Unix Latin−1, Windows Unicode( UTF−16) 文 件 也 可 以 被 转 换 为 Unix Unicode( UTF−8) 文 件 。

二 进 制 文 件 则 会 被 自 动 跳 过 , 除 非 指 定 了 强 制 转 换 选 项 。

特 殊 文 件 , 如 目 录 和 队 列 , 会 被 自 动 跳 过 。

符 号 链 接 和 其 所 指 向 的 目 标 默 认 不 会 被 转 换 。 可 以 用 选 项 来 指 定 替 换 符 号 链 接 , 或 者 将 输 出 写 入 到 链 接 目 标 。 Windows下 不 支 持 写 入 到 符 号 链 接 的 目 标 。

Dos2unix由 SunOS/Solaris下 的 版 本 改 写 而 成 。 这 两 个 版 本 间 有 一 个 重 大 差 异 : 本 版 本 默 认 进 行 原 位 转 换 ( 旧 文 件 模 式 ) , 而 原 来 SunOS/Solaris下 的 版 本 只 支 持 配 对 转 换 ( 新 文 件 模 式 ) , 参 见 选 项 "−o""−n"。 还 有 一 个 区 别 是 SunOS/Solaris下 的 版 本 默 认 使 用 iso 模 式 , 而 本 版 本 默 认 使 用 ascii 模 式 。

选 项

−−

将 后 面 所 有 的 选 项 当 作 文 件 名 。 如 果 你 希 望 转 换 一 个 文 件 名 以 破 折 号 开 头 的 文 件 , 可 以 使 用 这 个 选 项 。 例 如 , 要 转 换 一 个 名 为 “−foo”的 文 件 , 你 可 以 用 这 个 命 令 :

    dos2unix −− −foo

或 者 在 新 文 件 模 式 下 :

    dos2unix −n −− −foo out.txt

−−allow−chown

在 旧 文 件 模 式 下 , 允 许 修 改 文 件 的 所 有 者 。

若 使 用 此 选 项 , 将 允 许 在 转 换 文 件 时 原 始 文 件 的 属 主 或 属 组 发 生 变 更 , 类 似 于 使 用 新 文 件 模 式 进 行 转 换 。 另 请 参 见 选 项 "−o""−n"。 仅 当 dos2unix 支 持 保 护 文 件 的 属 主 /属 组 时 才 能 使 用 该 选 项 。

−ascii

只 转 换 断 行 符 。 这 是 默 认 的 转 换 模 式 。

−iso

在 DOS和 ISO−8859−1字 符 集 之 间 转 换 。 参 见 CONVERSION MODES 一 节 。

−1252

使 用 Windows 1252 编 码 页 ( 西 欧 ) 。

−437

使 用 DOS 437 编 码 页 ( 美 国 ) 。 这 是 ISO转 换 时 的 默 认 编 码 页 。

−850

使 用 DOS 850 编 码 页 ( 西 欧 ) 。

−860

使 用 DOS 860 编 码 页 ( 葡 萄 牙 ) 。

−863

使 用 DOS 863 编 码 页 ( 加 拿 大 法 语 ) 。

−865

 使 用 DOS 865 编 码 页 ( 北 欧 ) 。

−7

将 8位 字 符 转 换 到 7位 空 间 。

−b, −−keep−bom

保 留 字 节 序 标 记 ( BOM) 。 当 输 入 文 件 含 有 BOM头 时 , 也 向 输 出 文 件 写 入 BOM。 这 是 转 换 到 DOS断 行 符 时 的 默 认 行 为 。 参 见 选 项 "−r"

−c, −−convmode 转 换 模 式

改 变 转 换 模 式 。 转 换 模 式 可 以 为 : ascii7bitisomac, 默 认 为 ascii。

−D, −−display−enc ENCODAGE

设 置 显 示 文 本 的 编 码 。 编 码 可 以 为 : ansiunicodeunicodebomutf8utf8bom, 默 认 为 ansi。

这 一 选 项 只 对 支 持 Unicode文 件 名 的 Windows版 dos2unix有 效 。 它 对 文 件 名 的 读 写 无 效 , 只 影 响 它 们 的 显 示 结 果 。

在 Windows控 制 台 中 , 有 几 种 可 以 根 据 文 本 编 码 来 显 示 文 本 的 方 法 。 它 们 各 有 利 弊 。
ansi

dos2unix默 认 使 用 ANSI编 码 文 本 。 优 点 是 它 能 提 供 向 后 兼 容 性 , 并 能 用 于 raster和 TrueType字 体 。 在 一 些 地 方 , 你 可 能 需 要 使 用 "chcp" 命 令 将 活 动 DOS OEM编 码 页 设 置 为 Windows系 统 ANSI编 码 页 , 因 为 dos2unix使 用 Windows系 统 编 码 页 。

ansi的 缺 点 是 含 有 非 系 统 默 认 编 码 页 中 字 符 的 国 际 化 文 件 名 将 无 法 被 正 确 显 示 。 你 会 看 到 一 些 问 号 或 其 他 错 误 的 字 符 。 如 果 你 不 需 要 处 理 外 文 文 件 名 , 这 一 方 法 是 不 错 的 选 择 。

unicode, unicodebom

Unicode编 码 ( Windows中 对 UTF−16的 称 呼 ) 的 优 点 是 文 本 可 以 被 正 确 显 示 , 也 无 需 改 变 活 动 编 码 页 。 你 可 能 需 要 设 置 终 端 字 体 为 TrueType以 便 正 确 显 示 国 际 化 字 符 。 如 果 TrueType字 体 中 不 包 含 某 个 字 符 , 你 会 看 到 一 个 小 方 块 , 有 时 方 块 中 还 会 有 一 个 问 号 。

当 你 使 用 ConEmu终 端 时 , 所 以 的 文 本 将 会 被 正 确 显 示 , 因 为 ConEmu会 自 动 选 择 合 适 的 字 体 。

Unicode的 缺 点 在 于 它 与 ASCII不 兼 容 。 当 你 将 输 出 重 定 向 到 其 他 程 序 或 文 件 时 , 它 可 能 不 那 么 容 易 控 制

当 使 用 "unicodebom" 方 法 时 , 将 会 在 Unicode文 本 前 添 加 一 个 BOM( 字 节 序 标 记 ) 。 在 PowerShell中 , 需 要 根 据 BOM来 进 行 正 确 的 重 定 向 或 管 道 输 出 。

utf8, utf8bom

utf8的 优 点 在 于 它 与 ASCII兼 容 。 你 需 要 设 置 终 端 的 字 体 为 TrueType字 体 。 使 用 TrueType字 体 可 以 使 得 文 本 得 以 正 确 显 示 , 就 像 使 用 "unicode" 编 码 时 那 样 。

缺 点 是 当 你 使 用 默 认 的 raster字 体 时 , 所 有 的 非 ASCII字 符 将 无 法 被 正 确 显 示 。 不 仅 是 unicode文 件 名 , 连 翻 译 的 消 息 也 无 法 被 读 取 。 在 配 置 为 东 亚 地 区 的 Windows中 , 当 终 端 中 显 示 这 些 消 息 时 你 可 能 会 看 到 闪 烁 现 象 。

在 ConEmu终 端 中 , utf编 码 方 式 可 以 正 常 工 作 。

当 使 用 "utf8bom" 方 法 时 , 将 会 在 Unicode文 本 前 添 加 一 个 BOM( 字 节 序 标 记 ) 。 在 PowerShell中 , 需 要 根 据 BOM来 进 行 正 确 的 重 定 向 或 管 道 输 出 。

默 认 的 编 码 方 式 可 以 通 过 设 置 DOS2UNIX_DISPLAY_ENC 环 境 变 量 为 "unicode""unicodebom""utf8""utf8bom" 来 改 变 。

−f, −−force

强 制 转 换 二 进 制 文 件 。

−gb, −−gb18030

在 Windows中 , UTF−16默 认 被 转 换 为 UTF−8格 式 , 无 论 区 域 设 置 为 何 。 请 使 用 这 一 选 项 将 UTF−16文 件 转 换 为 GB18030格 式 。 此 选 项 只 在 Windows下 有 效 。 参 加 GB18030 一 节 。

−h, −−help

显 示 帮 助 , 然 后 退 出 。

−i[标 志 ], −−info[=标 志 ] 文 件 …

显 示 文 件 信 息 。 不 进 行 转 换 。

将 会 显 示 下 列 信 息 ( 按 顺 序 ) : DOS断 行 符 的 数 量 、 Unix断 行 符 的 数 量 、 Mac断 行 符 的 数 量 、 是 否 有 BOM、 文 本 /二 进 制 、 文 件 名 。

输 出 示 例 :

     6       0       0  no_bom    text    dos.txt
     0       6       0  no_bom    text    unix.txt
     0       0       6  no_bom    text    mac.txt
     6       6       6  no_bom    text    mixed.txt
    50       0       0  UTF−16LE  text    utf16le.txt
     0      50       0  no_bom    text    utf8unix.txt
    50       0       0  UTF−8     text    utf8dos.txt
     2     418     219  no_bom    binary  dos2unix.exe

注 意 , 二 进 制 文 件 有 时 会 被 误 判 为 文 本 文 件 。 参 见 选 项 "−s"

可 以 为 输 出 设 置 额 外 的 标 志 ( 一 个 或 多 个 ) 。

0

使 用 零 字 符 ( "\0") 而 非 换 行 符 来 分 割 文 件 信 息 行 。 用 于 在 指 定 了 c 选 项 的 情 况 下 , 正 确 解 析 含 有 空 格 或 引 号 的 文 件 名 。 请 结 合 xargs(1) 的 选 项 "−0""−−null" 来 使 用 。

d

显 示 DOS断 行 符 的 数 量 。

u

显 示 Unix断 行 符 的 数 量 。

m

显 示 Mac断 行 符 的 数 量 。

b

显 示 BOM状 况 。

t

显 示 文 件 为 文 本 或 二 进 制 。

c

只 显 示 将 会 被 转 换 的 文 件 。

若 设 置 了 "c"标 志 , dos2unix将 只 显 示 含 有 DOS断 行 符 的 文 件 , unix2dos将 只 显 示 含 有 Unix断 行 符 的 文 件 。

h

显 示 头 部 。

p

显 示 不 含 路 径 的 文 件 名 。

示 例 :

显 示 所 有 *.txt 文 件 的 信 息 :

    dos2unix −i *.txt

只 显 示 DOS断 行 符 和 Unix断 行 符 的 数 量 :

    dos2unix −idu *.txt

只 显 示 BOM状 况 :

    dos2unix −−info=b *.txt

列 出 含 有 DOS断 行 符 的 文 件 :

    dos2unix −ic *.txt

列 出 含 有 Unix断 行 符 的 文 件 :

    unix2dos −ic *.txt

只 转 换 含 有 DOS断 行 符 的 文 件 , 保 持 其 他 文 件 不 变 :

    dos2unix −ic0 *.txt | xargs −0 dos2unix

查 找 含 有 DOS断 行 符 的 文 本 文 件 :

    find −name '*.txt' −print0 | xargs −0 dos2unix −ic

−k, −−keepdate

将 输 入 文 件 的 时 间 戳 应 用 到 输 出 文 件 。

−L, −−license

显 示 程 序 许 可 证 。

−l, −−newline

添 加 额 外 的 新 行 。

dos2unix: 只 有 DOS断 行 符 会 被 转 换 为 两 个 Unix断 行 符 。 在 Mac模 式 下 , 只 有 Mac断 行 符 会 被 转 换 为 Unix断 行 符 。

unix2dos: 只 有 Unix断 行 符 会 被 转 换 为 两 个 DOS断 行 符 。 在 Mac模 式 下 , Unix断 行 符 会 被 转 换 为 两 个 Mac断 行 符 。

−m, −−add−bom

将 字 节 序 标 记 ( BOM) 写 入 到 输 出 文 件 。 默 认 情 况 下 将 写 入 UTF−8 BOM。

当 输 入 文 件 为 UTF−16格 式 , 并 且 使 用 了 "−u"选 项 , 将 写 入 UTF−16 BOM。

当 输 出 文 件 不 是 UTF−8、 UTF−16或 GB18030格 式 时 , 请 不 要 使 用 此 选 项 。 参 加 UNICODE 一 节 。

−n, −−newline 输 入 文 件 输 出 文 件 ...

新 文 件 模 式 。 转 换 输 入 文 件 并 写 入 到 输 出 文 件 。 文 件 名 必 须 成 对 给 出 , 并 且 不 能 使 用 通 配 符 , 否 则 你 将 会 丢 失 文 件 。

使 用 新 文 件 ( 配 对 ) 模 式 转 换 时 , 命 令 执 行 者 必 须 为 文 件 的 所 有 者 。 新 文 件 的 读 /写 权 限 将 由 源 文 件 的 权 限 减 去 命 令 执 行 者 的 umask(1) 得 到 。

−−no−allow−chown

在 旧 文 件 模 式 下 , 不 允 许 修 改 文 件 的 所 有 者 ( 默 认 选 项 ) 。

当 原 始 文 件 的 属 主 /属 组 无 法 保 持 不 变 时 , 停 止 格 式 转 换 。 另 请 参 见 "−o""−n"选 项 。 仅 当 dos2unix 支 持 保 护 文 件 的 属 主 /属 组 时 才 能 使 用 该 选 项 。

−o, −−oldfile 文 件 ...

旧 文 件 模 式 。 转 换 并 将 输 出 覆 盖 到 源 文 件 。 程 序 默 认 使 用 此 模 式 , 允 许 使 用 通 配 符 。

在 旧 文 件 ( 替 换 ) 模 式 下 , 被 转 换 的 文 件 的 所 有 者 、 组 和 读 /写 权 限 保 持 不 变 。 当 文 件 被 其 他 具 有 写 权 限 的 用 户 ( 如 root) 转 换 时 , 情 况 也 是 如 此 。 如 果 无 法 保 持 这 些 值 不 变 , 转 换 将 会 终 止 。 改 变 源 文 件 的 所 有 者 可 能 造 成 其 无 法 读 取 该 文 件 , 而 改 变 组 则 可 能 带 来 安 全 隐 患 , 使 文 件 被 不 法 分 子 读 取 。 只 有 Unix才 支 持 转 换 时 保 留 所 有 者 、 组 和 读 /写 权 限 。

若 要 查 看 dos2unix 是 否 支 持 保 护 文 件 的 所 有 者 , 请 输 入 "dos2unix −V"

dos2unix 在 转 换 格 式 时 会 生 成 一 个 临 时 文 件 。 如 果 在 转 换 时 出 错 , 它 会 删 除 临 时 文 件 , 从 而 保 证 原 始 文 件 不 被 更 改 ; 如 果 转 换 成 功 , 将 用 临 时 文 件 替 换 原 始 文 件 。 在 这 一 过 程 中 , 如 果 dos2unix 无 法 将 临 时 文 件 的 所 有 者 设 置 为 原 始 文 件 的 所 有 者 , 那 么 新 生 成 的 文 件 也 无 法 保 留 原 始 文 件 的 属 主 /属 组 属 性 ( 即 便 您 对 原 始 文 件 有 写 入 权 限 ) 。 在 这 种 情 况 下 , 可 以 使 用 "−−allow−chown"选 项 来 继 续 进 行 转 换 :

    dos2unix −−allow−chown foo.txt

或 者 在 新 文 件 模 式 下 :

    dos2unix −n foo.txt foo.txt

使 用 "−−allow−chown"选 项 的 好 处 在 于 : 您 可 以 使 用 通 配 符 来 操 作 文 件 , 同 时 尽 可 能 保 持 文 件 的 所 有 者 不 变 。

−q, −−quiet

安 静 模 式 。 不 显 示 任 何 警 告 或 信 息 。 返 回 值 为 0, 除 非 命 令 行 选 项 有 误 。

−r, −−remove−bom

移 除 字 节 序 标 记 ( BOM) , 不 写 入 BOM到 输 出 文 件 。 这 是 转 换 到 Unix断 行 符 时 的 默 认 行 为 。 参 见 选 项 "−b"

−s, −−safe

跳 过 二 进 制 文 件 ( 默 认 ) 。

跳 过 二 进 制 文 件 是 为 了 避 免 可 能 的 错 误 。 请 注 意 , 对 二 进 制 文 件 的 探 测 并 不 能 做 到 100%准 确 。 程 序 通 过 扫 描 二 进 制 文 件 所 特 有 的 标 记 来 将 其 与 文 本 文 件 区 分 开 来 , 但 有 的 二 进 制 文 件 可 能 只 包 含 普 通 的 文 本 字 符 , 这 样 的 文 件 就 会 被 误 判 为 文 本 文 件 。

−u, −−keep−utf16

保 留 输 入 文 件 的 UTF−16编 码 。 输 出 文 件 也 使 用 UTF−16编 码 和 相 同 的 尾 序 。 这 将 阻 止 转 换 到 UTF−8。 相 应 也 会 写 入 UTF−16 BOM。 可 以 用 "−ascii"选 项 来 禁 止 。

−ul, −−assume−utf16le

假 定 输 入 文 件 格 式 为 UTF−16LE。

输 入 文 件 中 有 BOM时 , 将 会 覆 盖 此 选 项 。

如 果 你 做 了 错 误 的 假 设 ( 输 入 文 件 不 为 UTF−16LE格 式 ) , 并 且 转 换 成 功 , 你 将 会 得 到 一 个 错 误 的 UTF−8格 式 的 文 件 。 你 可 以 用 iconv(1) 来 撤 销 转 换 , 将 其 从 UTF−8转 换 回 UTF−16LE。 这 样 做 可 以 恢 复 源 文 件 。

对 UTF−16LE的 假 定 将 根 据 l<转 换 模 式 > 来 工 作 。 若 改 变 了 默 认 的 l<ascii> 模 式 , 则 这 一 假 定 将 会 被 关 闭 。

−ub, −−assume−utf16be

假 定 输 入 文 件 格 式 为 UTF−16BE。

这 一 选 项 与 "−ul" 类 似 。

−v, −−verbose

显 示 更 多 信 息 。 将 会 显 示 有 关 BOM和 转 换 统 计 的 额 外 信 息 。

−F, −−follow−symlink

追 踪 符 号 链 接 并 转 换 其 目 标 。

−R, −−replace−symlink

将 符 号 链 接 的 目 标 替 换 为 转 换 后 的 文 件 ( 原 来 的 目 标 文 件 保 持 不 变 ) 。

−S, −−skip−symlink

保 持 符 号 链 接 和 其 目 标 文 件 不 变 ( 默 认 ) 。

−V, −−version

显 示 版 本 信 息 , 然 后 退 出 。

Mac模 式

普 通 模 式 下 , 断 行 符 将 被 转 换 为 DOS格 式 , 或 相 反 。 Mac格 式 的 断 行 符 将 不 会 被 转 换 。

Mac模 式 下 , Mac断 行 符 将 被 转 换 为 Unix格 式 , 或 相 反 。 DOS断 行 符 将 不 会 被 转 换 。

若 要 以 Mac模 式 运 行 , 请 使 用 命 令 行 选 项 "−c mac", 或 使 用 命 令 "mac2unix""unix2mac"

转 换 模 式

ascii

"ascii" 模 式 下 , 只 转 换 断 行 符 。 这 是 默 认 的 转 换 模 式 。

尽 管 此 模 式 名 叫 “ASCII”( 7位 编 码 标 准 ) , 实 际 上 转 换 按 照 8位 编 码 进 行 。 转 换 UTF−8编 码 文 件 时 请 务 必 使 用 此 模 式 。

7bit

在 此 模 式 下 , 所 以 的 8位 非 ASCII字 符 ( 取 值 范 围 128−255) 将 被 转 换 到 7位 编 码 空 间 。

iso

Unix下 , 将 在 DOS字 符 集 ( 编 码 页 ) 和 ISO字 符 集 ISO−8859−1( Latin−1) 之 间 进 行 转 换 。 不 具 有 ISO−8859−1 中 对 等 字 符 的 DOS字 符 将 会 被 转 换 为 点 号 ( “.”) 。 当 ISO−8859−1 字 符 集 中 没 有 DOS中 的 对 等 字 符 时 也 是 如 此 。

当 只 指 定 了 "−iso" 选 项 时 , dos2unix将 尝 试 确 定 当 前 活 动 代 码 页 。 若 无 法 确 定 , 则 使 用 默 认 代 码 页 CP437( 普 遍 用 于 美 国 ) 。 若 要 强 制 指 定 代 码 页 , 请 使 用 选 项 "−437"( 美 国 ) 、 "−850"( 西 欧 ) 、 "−860"( 葡 萄 牙 ) 、 "−863"( 法 国 、 加 拿 大 ) 或 "−865"( 北 欧 ) 。 Windows CP1252代 码 页 ( 西 欧 ) 也 可 以 通 过 选 项 "−1252" 获 得 支 持 。 若 要 使 用 其 他 代 码 页 , 可 以 结 合 iconv(1) 使 用 dos2unix。 iconv可 以 在 很 多 字 符 编 码 间 进 行 转 换 。

不 对 Unicode编 码 文 本 使 用 ISO转 换 。 因 这 一 转 换 会 导 致 UTF−8编 码 文 件 损 坏 。

一 些 示 例 :

从 DOS默 认 编 码 页 转 换 到 Unix Latin−1:

    dos2unix −iso −n in.txt out.txt

从 DOS CP850转 换 到 Unix Latin−1:

    dos2unix −850 −n in.txt out.txt

从 Windows CP1252转 换 到 Unix Latin−1:

    dos2unix −1252 −n in.txt out.txt

从 WIndows CP1252转 换 到 Unix UTF−8( Unicode) :

    iconv −f CP1252 −t UTF−8 in.txt | dos2unix > out.txt

从 Unix Latin−1转 换 到 DOS默 认 编 码 页 :

    unix2dos −iso −n in.txt out.txt

从 Unix Latin−1转 换 到 DOS CP850:

    unix2dos −850 −n in.txt out.txt

从 Unix Latin−1转 换 到 Windows CP1252:

    unix2dos −1252 −n in.txt out.txt

从 Unix UTF−8( Unicode) 转 换 到 Windows CP1252:

    unix2dos < in.txt | iconv −f UTF−8 −t CP1252 > out.txt

参 见 <http://czyborra.com/charsets/codepages.html>; et <http://czyborra.com/charsets/iso8859.html>。;

UNICODE

编 码
有 几 种 不 同 的 Unicode编 码 。 对 于 Unix和 Linux中 的 Unicode文 件 , 通 常 为 UTF−8编 码 。 Windows中 的 文 本 文 件 可 以 是 UTF−8、 UTF−16或 UTF−16BE编 码 , 但 大 多 采 用 UTF−16格 式 。

转 换
Unicode文 本 文 件 可 以 含 有 DOS、 Unix或 Mac断 行 符 , 就 像 普 通 文 本 文 件 一 样 。

所 有 版 本 的 dos2unix和 unix2dos都 可 以 转 换 UTF−8文 件 , 因 为 UTF−8向 后 兼 容 ASCII。

含 有 Unicode UTF−16支 持 的 dos2unix和 unix2dos可 以 读 取 小 尾 序 或 大 尾 序 的 UTF−16编 码 文 本 。 输 入 "dos2unix −V" 来 确 定 dos2unix在 编 译 是 是 否 启 用 了 UTF−16支 持 。

在 Unix/Linux中 , UTF−16编 码 文 件 将 被 转 换 为 区 域 字 符 编 码 所 指 定 的 编 码 。 可 以 使 用 locale(1) 命 令 来 查 看 当 前 的 区 域 字 符 编 码 。 若 无 法 转 换 , 程 序 将 报 告 转 换 错 误 并 跳 过 此 文 件 。

在 Windows中 , UTF−16文 件 被 默 认 转 换 为 UTF−8格 式 。 Windows和 Unix/Linux均 支 持 UTF−8格 式 的 文 本 文 件 。

UTF−16和 UTF−8编 码 相 互 兼 容 , 所 以 彼 此 转 换 时 不 会 丢 失 文 本 。 倘 若 转 换 中 出 错 , 比 如 UTF−16格 式 的 输 入 文 件 含 有 错 误 , 那 么 该 文 件 将 被 跳 过 。

若 使 用 了 "−u" 选 项 , 输 出 文 件 将 会 使 用 和 输 入 文 件 相 同 的 UTF−16编 码 。 "−u"选 项 将 阻 止 程 序 转 换 到 UTF−8。

dos2unix和 unix2dos没 有 用 于 转 换 UTF−8到 UTF−16的 选 项 。

ISO和 7位 编 码 模 式 的 转 换 无 法 用 于 UTF−16文 件 。

字 节 序 标 记
在 Windows中 , 文 本 文 件 一 般 含 有 字 节 序 标 记 ( BOM) , 因 为 很 多 Windows程 序 ( 包 括 记 事 本 ) 默 认 添 加 BOM。 参 见 <http://en.wikipedia.org/wiki/Byte_order_mark>。;

在 Unix中 , Unicode文 件 一 般 不 含 BOM。 假 定 文 本 文 件 使 用 区 域 字 符 编 码 设 置 所 指 定 的 编 码 。

dos2unix只 能 检 测 含 有 BOM文 件 的 UTF−16格 式 。 若 UTF−16文 件 不 含 BOM, dos2unix会 将 其 视 作 二 进 制 文 件 。

请 使 用 选 项 "−ul""−ub" 来 转 换 不 含 BOM的 UTF−16文 件 。

dos2unix默 认 不 输 出 BOM。 使 用 "−b" 选 项 可 以 让 dos2unix将 BOM添 加 到 输 出 文 件 , 如 果 输 入 文 件 也 含 有 BOM的 话 。

unix2dos默 认 输 出 BOM, 如 果 输 入 文 件 也 含 有 BOM的 话 。 使 用 "−r" 可 以 移 除 BOM。

若 使 用 了 "−m" 选 项 , dos2unix和 unix2dos将 总 是 输 出 BOM。

Windows中 Unicode文 件 的 文 件 名
dos2unix对 于 Windows命 令 提 示 符 中 读 取 和 写 入 Unicode文 件 名 有 额 外 的 支 持 。 这 意 味 着 dos2unix可 以 打 开 那 些 包 含 非 默 认 系 统 ANSI编 码 页 字 符 的 文 件 。 若 要 查 看 Windows版 dos2unix在 编 译 时 是 否 加 入 了 Unicode文 件 名 支 持 , 请 输 入 "dos2unix −V"

在 Windows终 端 中 显 示 Unicode文 件 名 有 一 些 需 要 注 意 的 问 题 。 请 参 见 "−D""−−display−enc" 选 项 。 文 件 名 在 终 端 中 可 能 无 法 被 正 确 显 示 , 但 写 入 文 件 时 文 件 名 仍 然 是 正 确 的 。

Unicode示 例
转 换 Windows UTF−16到 Unix UTF−8:

    dos2unix −n in.txt out.txt

转 换 Windows UTF−16LE( 不 含 BOM) 到 Unix UTF−8:

    dos2unix −ul −n in.txt out.txt

转 换 Unix UTF−8到 Windows UTF−8( 并 添 加 BOM) :

    unix2dos −m −n in.txt out.txt

转 换 Unix UTF−8到 Windows UTF−16:

    unix2dos < in.txt | iconv −f UTF−8 −t UTF−16 > out.txt

GB18030

GB18030是 中 国 国 家 标 准 。 GB18030标 准 的 一 系 列 子 集 被 强 制 应 用 于 中 国 销 售 的 软 件 产 品 。 参 见 <http://en.wikipedia.org/wiki/GB_18030>。;

GB18030与 Unicode完 全 兼 容 , 并 且 可 以 被 认 为 是 Unicode格 式 的 变 体 。 和 UTF−8一 样 , GB18030也 兼 容 ASCII。 GB18030也 兼 容 Windows 936代 码 页 ( GBK) 。

在 Unix/Linux中 , 若 区 域 编 码 被 设 置 为 GB18030, UTF−16文 件 将 被 转 换 为 GB18030格 式 。 注 意 只 有 当 系 统 支 持 区 域 设 置 时 这 一 才 会 进 行 这 一 转 换 。 可 以 使 用 "locale −a" 命 令 来 获 取 受 支 持 的 区 域 。

在 Windows中 , 你 需 要 使 用 "−gb" 选 项 来 转 换 UTF−16文 件 到 GB18030编 码 。

GB18030编 码 的 文 件 和 Unicode文 件 一 样 可 以 含 有 BOM。

示 例

从 标 准 输 入 读 取 , 并 输 出 到 标 准 输 出 :

    dos2unix < a.txt
    cat a.txt | dos2unix

转 换 并 覆 盖 a.txt和 b.txt:

    dos2unix a.txt b.txt
    dos2unix −o a.txt b.txt

转 换 并 覆 盖 a.txt, 使 用 ascii模 式 :

    dos2unix a.txt

转 换 并 覆 盖 a.txt, 使 用 ascii模 式 ; 转 换 并 覆 盖 b.txt, 使 用 7位 编 码 模 式 :

    dos2unix a.txt −c 7bit b.txt
    dos2unix −c ascii a.txt −c 7bit b.txt
    dos2unix −ascii a.txt −7 b.txt

将 a.txt从 Mac格 式 转 换 到 Unix格 式 :

    dos2unix −c mac a.txt
    mac2unix a.txt

将 a.txt从 Unix格 式 转 换 到 Mac格 式 :

    unix2dos −c mac a.txt
    unix2mac a.txt

转 换 并 覆 盖 a.txt, 保 留 原 始 时 间 戳 :

    dos2unix −k a.txt
    dos2unix −k −o a.txt

转 换 a.txt, 并 输 出 到 e.txt:

    dos2unix −n a.txt e.txt

转 换 a.txt, 并 输 出 到 e.txt, 同 时 使 e.txt的 时 间 戳 和 a.txt一 致 :

    dos2unix −k −n a.txt e.txt

转 换 并 覆 盖 a.txt; 转 换 b.txt并 输 出 到 e.txt:

    dos2unix a.txt −n b.txt e.txt
    dos2unix −o a.txt −n b.txt e.txt

转 换 c.txt并 输 出 到 e.txt; 转 换 并 覆 盖 a.txt和 b.txt; 转 换 d.txt并 输 出 到 f.txt:

    dos2unix −n c.txt e.txt −o a.txt b.txt −n d.txt f.txt

递 归 转 换

结 合 find(1)xargs(1) 使 用 dos2unix 可 以 递 归 地 转 换 目 录 树 中 的 文 本 文 件 。 例 如 , 转 换 当 前 目 录 的 目 录 树 中 所 有 的 .txt 文 件 :

    dos2unix < a.txt
    cat a.txt | dos2unix

若 文 件 名 中 有 空 格 或 引 号 , 则 需 要 使 用 find(1) 选 项 "−print0" 及 相 应 的 xargs(1) 选 项 "−0"; 其 他 情 况 下 则 可 以 省 略 它 们 。 也 可 以 结 合 "−exec" 选 项 来 使 用 find(1)

    find . −name '*.txt' −exec dos2unix {} \;

在 Windows命 令 提 示 符 中 , 可 以 使 用 下 列 命 令 :

    for /R %G in (*.txt) do dos2unix "%G"

PowerShell用 户 可 以 在 Windows PowerShell中 使 用 如 下 命 令 :

    get−childitem −path . −filter '*.txt' −recurse | foreach−object {dos2unix $_.Fullname}

区 域

LANG

LANG环 境 变 量 指 定 了 程 序 所 使 用 的 首 选 语 言 。 它 包 括 几 个 部 分 : 第 一 部 分 是 小 写 的 语 言 编 码 , 第 二 部 分 是 ( 可 选 的 ) 大 写 的 国 家 /地 区 代 码 , 前 面 用 下 划 线 连 接 ; 第 三 部 分 也 是 可 选 的 , 即 字 符 编 码 , 前 面 用 点 连 接 。 一 些 POSIX规 范 的 示 例 如 下 :

    export LANG=zh               中 文
    export LANG=zh_CN            中 文 , 中 国
    export LANG=zh_TW            中 文 , 台 湾
    export LANG=es_ES            西 班 牙 语 , 西 班 牙
    export LANG=es_MX            西 班 牙 语 , 墨 西 哥
    export LANG=en_US.iso88591   英 语 , 美 国 , Latin−1编 码
    export LANG=en_GB.UTF−8      英 语 , 英 国 , UTF−8编 码

完 整 的 语 言 和 国 家 /地 区 编 码 可 以 在 gettext手 册 中 找 到 : <http://www.gnu.org/software/gettext/manual/html_node/Usual−Language−Codes.html>;

在 Unix系 统 中 , 你 可 以 使 用 locale(1) 命 令 获 取 特 定 区 域 的 信 息 。

LANGUAGE

可 以 使 用 LANGUAGE变 量 指 定 一 系 列 语 言 的 优 先 级 , 各 项 之 间 由 冒 号 分 割 。 dos2unix首 先 使 用 LANGUAGE变 量 , 其 次 才 是 LANG。 例 如 , 首 选 中 文 、 其 次 英 文 : "LANGUAGE=<zh:en"。 在 使 用 语 言 优 先 级 之 前 , 必 须 先 启 用 区 域 化 功 能 , 即 将 LANG( 或 LC_ALL) 变 量 设 置 为 除 了 “C”以 外 的 其 他 值 。 参 见 gettext手 册 : <http://www.gnu.org/software/gettext/manual/html_node/The−LANGUAGE−variable.html>;

如 果 你 选 择 了 一 个 不 可 用 的 语 言 , 程 序 将 会 输 出 标 准 的 英 语 信 息 。

DOS2UNIX_LOCALEDIR

DOS2UNIX_LOCALEDIR环 境 变 量 将 覆 盖 编 译 时 设 置 的 LOCALEDIR变 量 。 LOCALEDIR被 用 于 查 找 语 言 文 件 。 GNU程 序 的 默 认 值 为 "/usr/local/share/locale"。 可 以 使 用 −−version 查 看 当 前 的 LOCALEDIR。

示 例 ( POSIX shell) :

    export DOS2UNIX_LOCALEDIR=$HOME/share/locale

返 回 值

若 成 功 , 返 回 0。 若 出 现 系 统 错 误 , 则 返 回 最 近 一 次 系 统 错 误 号 。 若 发 生 其 他 错 误 , 返 回 1。

在 安 静 模 式 下 , 返 回 值 总 是 为 0, 除 非 命 令 行 选 项 有 误 。

遵 循 规 范

<http://en.wikipedia.org/wiki/Text_file>;

<http://en.wikipedia.org/wiki/Carriage_return>;

<http://en.wikipedia.org/wiki/Newline>;

<http://en.wikipedia.org/wiki/Unicode>;

作 者

Benjamin Lin − <blin [AT] socs.au> Bernd Johannes Wuebben( mac2unix模 式 ) − <wuebben [AT] kde.org>, Christian Wurll( 添 加 额 外 新 行 ) − <wurll [AT] ira.de>, Erwin Waterlander − <waterlan [AT] xs4all.nl>( 维 护 者 )

项 目 主 页 : <http://waterlan.home.xs4all.nl/dos2unix.html>;

SourceForge主 页 : <http://sourceforge.net/projects/dos2unix/>;

参 见

file(1) find(1) iconv(1) locale(1) xargs(1)