Mac OS X下各种文件编码的转换方法

何曾几时本猫还在windows下编码的时候,那时ruby的源代码的编码格式都是gbk啊!导致N多中文显示为乱码。后来无奈写了个转换代码从gbk编码转为utf-8格式的小工具:

#!/usr/bin/ruby
#tool 4 gbk encoding to utf8 

src_path = $*[0]
unless src_path
	puts "usage #{$0[2..-1]} gbk_file"
	exit 1
end

dir_name,base_name = File.split(src_path)
dst_path = dir_name << '/u8_' << base_name
f_src = File.open(src_path,"r:gbk")
f_dst = File.open(dst_path,"w:utf-8")

f_src.each_with_index do |line,i|
	line.encode!("utf-8")
	if(i < 2)
		#line.gsub!(/gbk/,"utf-8") if(line =~ /^#[ ]*coding*/)
		line.gsub!(/gbk/,"utf-8") if(line =~ /^*coding*/)
	end
	f_dst.puts line
end

f_src.close
f_dst.close
`chmod +x #{dst_path}`

再后来发现mac系统下自带iconv这个好东东啊:

ICONV(1)                   Linux Programmer‘s Manual                  ICONV(1)

NAME

iconv - character set conversion

SYNOPSIS

iconv [OPTION...] [-f
encoding] [-t
encoding] [inputfile ...]

iconv -l

DESCRIPTION

The  iconv program converts text from one encoding to another encoding.

More precisely, it converts from the encoding given for the 
-f  option

to  the  encoding  given  for  the
-t option. Either of these encodings

defaults to the encoding of the current locale. All the
inputfiles  are

read  and  converted  in  turn;  if no
inputfile is given, the standard

input is used. The converted text is printed to standard output.

The encodings permitted are system dependent. For the  libiconv  imple-

mentation, they are listed in the iconv_open(3) manual page.

Options controlling the input and output format:

-f
encoding, --from-code=encoding

我们来试一下,创建一个utf-8格式的文本:

路人甲:最近又多学了德语,现在懂中文,英语和德语啊

猫猫:靠,我早精通十几门语言了

路人甲:擦,我才不信

猫猫:汇编语言,C语言,C++语言,C#语言,ruby语言,javascript语言...

路人甲:...

用iconv转换为gbk格式(或者反向转换也可以):

[email protected]: ruby_src$iconv -f UTF-8 -t GBK ex_u8.txt > ex_gbk.txt

[email protected]: ruby_src$cat ex_gbk.txt

·???:????????????????????????????

èè?????????羫????????????

·??????????????

èè?????????,C????,C++?????C#????,ruby????,javascript????...

·???:[email protected]: ruby_src$

我们可以看一下iconv到底支持多少种编码格式,貌似是超多的啊:

[email protected]: ruby_src$iconv -l

ANSI_X3.4-1968 ANSI_X3.4-1986 ASCII CP367 IBM367 ISO-IR-6 ISO646-US ISO_646.IRV:1991 US US-ASCII CSASCII

UTF-8

UTF-8-MAC UTF8-MAC

ISO-10646-UCS-2 UCS-2 CSUNICODE

UCS-2BE UNICODE-1-1 UNICODEBIG CSUNICODE11

UCS-2LE UNICODELITTLE

ISO-10646-UCS-4 UCS-4 CSUCS4

UCS-4BE

UCS-4LE

UTF-16

UTF-16BE

UTF-16LE

UTF-32

UTF-32BE

UTF-32LE

UNICODE-1-1-UTF-7 UTF-7 CSUNICODE11UTF7

UCS-2-INTERNAL

UCS-2-SWAPPED

UCS-4-INTERNAL

UCS-4-SWAPPED

C99

JAVA

CP819 IBM819 ISO-8859-1 ISO-IR-100 ISO8859-1 ISO_8859-1 ISO_8859-1:1987 L1 LATIN1 CSISOLATIN1

ISO-8859-2 ISO-IR-101 ISO8859-2 ISO_8859-2 ISO_8859-2:1987 L2 LATIN2 CSISOLATIN2

ISO-8859-3 ISO-IR-109 ISO8859-3 ISO_8859-3 ISO_8859-3:1988 L3 LATIN3 CSISOLATIN3

ISO-8859-4 ISO-IR-110 ISO8859-4 ISO_8859-4 ISO_8859-4:1988 L4 LATIN4 CSISOLATIN4

CYRILLIC ISO-8859-5 ISO-IR-144 ISO8859-5 ISO_8859-5 ISO_8859-5:1988 CSISOLATINCYRILLIC

ARABIC ASMO-708 ECMA-114 ISO-8859-6 ISO-IR-127 ISO8859-6 ISO_8859-6 ISO_8859-6:1987 CSISOLATINARABIC

ECMA-118 ELOT_928 GREEK GREEK8 ISO-8859-7 ISO-IR-126 ISO8859-7 ISO_8859-7 ISO_8859-7:1987 ISO_8859-7:2003 CSISOLATINGREEK

HEBREW ISO-8859-8 ISO-IR-138 ISO8859-8 ISO_8859-8 ISO_8859-8:1988 CSISOLATINHEBREW

ISO-8859-9 ISO-IR-148 ISO8859-9 ISO_8859-9 ISO_8859-9:1989 L5 LATIN5 CSISOLATIN5

ISO-8859-10 ISO-IR-157 ISO8859-10 ISO_8859-10 ISO_8859-10:1992 L6 LATIN6 CSISOLATIN6

ISO-8859-11 ISO8859-11 ISO_8859-11

ISO-8859-13 ISO-IR-179 ISO8859-13 ISO_8859-13 L7 LATIN7

ISO-8859-14 ISO-CELTIC ISO-IR-199 ISO8859-14 ISO_8859-14 ISO_8859-14:1998 L8 LATIN8

ISO-8859-15 ISO-IR-203 ISO8859-15 ISO_8859-15 ISO_8859-15:1998 LATIN-9

ISO-8859-16 ISO-IR-226 ISO8859-16 ISO_8859-16 ISO_8859-16:2001 L10 LATIN10

KOI8-R CSKOI8R

KOI8-U

KOI8-RU

CP1250 MS-EE WINDOWS-1250

CP1251 MS-CYRL WINDOWS-1251

CP1252 MS-ANSI WINDOWS-1252

CP1253 MS-GREEK WINDOWS-1253

CP1254 MS-TURK WINDOWS-1254

CP1255 MS-HEBR WINDOWS-1255

CP1256 MS-ARAB WINDOWS-1256

CP1257 WINBALTRIM WINDOWS-1257

CP1258 WINDOWS-1258

850 CP850 IBM850 CSPC850MULTILINGUAL

862 CP862 IBM862 CSPC862LATINHEBREW

866 CP866 IBM866 CSIBM866

CP1131

MAC MACINTOSH MACROMAN CSMACINTOSH

MACCENTRALEUROPE

MACICELAND

MACCROATIAN

MACROMANIA

MACCYRILLIC

MACUKRAINE

MACGREEK

MACTURKISH

MACHEBREW

MACARABIC

MACTHAI

HP-ROMAN8 R8 ROMAN8 CSHPROMAN8

NEXTSTEP

ARMSCII-8

GEORGIAN-ACADEMY

GEORGIAN-PS

KOI8-T

CP154 CYRILLIC-ASIAN PT154 PTCP154 CSPTCP154

KZ-1048 RK1048 STRK1048-2002 CSKZ1048

MULELAO-1

CP1133 IBM-CP1133

ISO-IR-166 TIS-620 TIS620 TIS620-0 TIS620.2529-1 TIS620.2533-0 TIS620.2533-1

CP874 WINDOWS-874

VISCII VISCII1.1-1 CSVISCII

TCVN TCVN-5712 TCVN5712-1 TCVN5712-1:1993

ISO-IR-14 ISO646-JP JIS_C6220-1969-RO JP CSISO14JISC6220RO

JISX0201-1976 JIS_X0201 X0201 CSHALFWIDTHKATAKANA

ISO-IR-87 JIS0208 JIS_C6226-1983 JIS_X0208 JIS_X0208-1983 JIS_X0208-1990 X0208 CSISO87JISX0208

ISO-IR-159 JIS_X0212 JIS_X0212-1990 JIS_X0212.1990-0 X0212 CSISO159JISX02121990

CN GB_1988-80 ISO-IR-57 ISO646-CN CSISO57GB1988

CHINESE GB_2312-80 ISO-IR-58 CSISO58GB231280

CN-GB-ISOIR165 ISO-IR-165

ISO-IR-149 KOREAN KSC_5601 KS_C_5601-1987 KS_C_5601-1989 CSKSC56011987

EUC-JP EUCJP EXTENDED_UNIX_CODE_PACKED_FORMAT_FOR_JAPANESE CSEUCPKDFMTJAPANESE

MS_KANJI SHIFT-JIS SHIFT_JIS SJIS CSSHIFTJIS

CP932

ISO-2022-JP CSISO2022JP

ISO-2022-JP-1

ISO-2022-JP-2 CSISO2022JP2

CN-GB EUC-CN EUCCN GB2312 CSGB2312

GBK

CP936 MS936 WINDOWS-936

GB18030

ISO-2022-CN CSISO2022CN

ISO-2022-CN-EXT

HZ HZ-GB-2312

EUC-TW EUCTW CSEUCTW

BIG-5 BIG-FIVE BIG5 BIGFIVE CN-BIG5 CSBIG5

CP950

BIG5-HKSCS:1999

BIG5-HKSCS:2001

BIG5-HKSCS:2004

BIG5-HKSCS BIG5-HKSCS:2008 BIG5HKSCS

EUC-KR EUCKR CSEUCKR

CP949 UHC

CP1361 JOHAB

ISO-2022-KR CSISO2022KR

CP856

CP922

CP943

CP1046

CP1124

CP1129

CP1161 IBM-1161 IBM1161 CSIBM1161

CP1162 IBM-1162 IBM1162 CSIBM1162

CP1163 IBM-1163 IBM1163 CSIBM1163

DEC-KANJI

DEC-HANYU

437 CP437 IBM437 CSPC8CODEPAGE437

CP737

CP775 IBM775 CSPC775BALTIC

852 CP852 IBM852 CSPCP852

CP853

855 CP855 IBM855 CSIBM855

857 CP857 IBM857 CSIBM857

CP858

860 CP860 IBM860 CSIBM860

861 CP-IS CP861 IBM861 CSIBM861

863 CP863 IBM863 CSIBM863

CP864 IBM864 CSIBM864

865 CP865 IBM865 CSIBM865

869 CP-GR CP869 IBM869 CSIBM869

CP1125

EUC-JIS-2004 EUC-JISX0213

SHIFT_JIS-2004 SHIFT_JISX0213

ISO-2022-JP-2004 ISO-2022-JP-3

BIG5-2003

ISO-IR-230 TDS565

ATARI ATARIST

RISCOS-LATIN1

最后说点题外话,夸一下UNIX系统的整体性和统一性,这种统一性带来学习成本的急剧下降,而且让人很有成就感。比如我在ruby中知道正则表达式最后加i表示忽略大小写,我有次用grep查找的时候发觉也要忽略大小写查找,你猜猜我用神马选项:grep -i xxx,就是这么统一,这么和谐。windows下可以吗?哦,对了windows下人家不玩console,人家都玩窗口...

时间: 2024-10-20 14:44:52

Mac OS X下各种文件编码的转换方法的相关文章

Qt在Mac OS X下的编程环境搭建(配置Qt库和编译器,有图,很清楚)

尊重作者,支持原创,如需转载,请附上原地址:http://blog.csdn.net/libaineu2004/article/details/46234079 在Mac OS X下使用Qt开发,需要配置Qt库和编译器.编译器只能使用苹果公司自主研发的Clang.1.分别下载并安装XCode和Command Line Tools(必须安装),安装完毕后,Clang就有了. https://developer.apple.com/downloads/ 2.下载Qt并默认安装 http://down

解决 Mac OS X 下 IntelliJ IDEA、jEdit 等 Java 程序中文标点输入无效的方法

Mac OS X 下基于 Java 的程序(如 IntelliJ IDEA.jEdit 等)会出现中文标点输入无效的问题,在中文输入法状态,可以输入中文字,但输入中文标点最后上去的是英文标点.查阅了相关资料,原来这是 Java 自己的 bug.从 Java 8u51 版本开始就出现了这个 bug,一直到现在最新的 Java 8u72 仍然如此,但是老版本 Java 8u45 是没有这个问题的.所以,可以采取变通的方法,在 Mac OS X 上同时装一个老版本的 JDK 8u45,不会影响已经安装

Qt在Mac OS X下的编程环境搭建

尊重作者,支持原创,如需转载,请附上原地址:http://blog.csdn.net/libaineu2004/article/details/46234079 在Mac OS X下使用Qt开发,需要配置Qt库和编译器.编译器只能使用苹果公司自主研发的Clang.1.分别下载并安装XCode和Command Line Tools(必须安装),安装完毕后,Clang就有了. https://developer.apple.com/downloads/ 2.下载Qt并默认安装 http://down

Mac OS X 下安装python的MySQLdb模块

参考资料: mac os x下python安装MySQLdb模块   http://www.codeif.com/post/1073/ MAC OSX使用Python安装模块有关问题  http://www.myexception.cn/operating-system/1616547.html 在Mac OS X 中安装好了MySQL和Django,在Django中访问MySQL数据库时,提示“ImportError: No module named MySQLdb”,是由于没有安装Pytho

在Mac OS X下安装Android Studio

在Mac OS X下安装Android Studio只需要几步. 1. 下载Android Studio安装包(.dmg). 2. 打开Terminal输入java -version命令查看是否已安装JDK(1.8版本及以上),如果未安装就去http://www.oracle.com/technetwork/java/javase/downloads/index.html下载安装. 3. 双击Android Studio的dmg安装文件,把Android Studio拖放到Application

Mac OS X下显示隐藏文件方法

对于首次使用 Mac 系统的朋友来说,可能会有点稍微有点不适应,那就是 OS X 里并没有显示和隐藏文件的菜单或者设置.然而,其实在苹果 Mac OS X 操作系统下,隐藏文件是否显示有很多种设置方法,最简单的要算在 Mac 终端输入命令. 打开终端,输入以下命令: 显示/隐藏Mac隐藏文件命令如下(注意其中的空格): 显示Mac隐藏文件的命令:defaults write com.apple.finder AppleShowAllFiles -bool true && killall F

转:Mac OS X下Sublime Text (V2.0.1)破解

Mac OS X下Sublime Text (V2.0.1)破解 Mac OS X下Sublime Text (V2.0.1)破解 (2013-03-07 14:02:54) 转载▼     正版的买个license其实并不贵,定价为70美元.如果不买license,也可access所有功能,只是偶有pop-up提示购买.有能力的请支持正版! 以下是step-by-step instructions: 1. 在http://www.sublimetext.com/上根据操作系统选择对应版本下载,

Mac OS X下的终端基本命令

Mac OS X 启用超级用户的方法 Root user,又名超级用户,是一个权力最高的Unix 账户,Root 的账户能在整个系统里任何部份进行任何"操作",包括:拷贝档案.移动/移除档案.执行程序等.所以,通常 Root 的账户都只会指派给高级专业的用户使用.因此,苹果把Root user 隐藏在MacOS X 里.但有时候我们不得不启用Root用户以便于实现某些操作,可以通过以下三种方法把启动Root账户.方法一:把Mac OS X 的安装光盘放入到光驱中,用光盘启动系统,在安装

让Mac OS X下的终端像Linux那样拥有丰富多彩的颜色显示

我们知道Linux下的命令行终端具有颜色回显功能,用ls命令查看目录或者文件,终端会以不同的颜色来区分:使用vim命令行编辑器打开脚本或其他源程序代码会以语法高亮模式显示.而Mac OS X下的终端却始终以黑白两色来显示所有内容,显得很单调.其实我们也可以让Mac OS X下的终端像Linux那样拥有丰富多彩的颜色显示能力.具体如下: 1.让ls以及grep命令显示结果具备彩色 修改当前登录账号目录下的~/.bash_profile文件(如果没有就创建它),加入以下内容: alias ls='l