Subversionと文字コード

2006年2月2日木曜日
  • B!

Web programming

Web制作を外注とコラボしながら制作すると、同じ場所で作業していないこともあって素材やファイル、ソースコードの管理が難しい。
というわけでSubversionを試験的に使ってみることにした。試験的といいつつ、多分これで決まりかな?

ほぼ環境構築はできたのだが、OS Xだけ文字化けを起こしてしまう。しかも濁音、半濁音の文字だけ。

この文字化けのパターンはmod_encodingでも経験したのでUTF-8の仕様の違いが原因であろうとすぐに察しが付いた。この手の問題が起きた場合、たいていプログラム内部ではiconvを使って文字コード変換を行っているので、iconvを使っている部分に手を加えればよい。

OS XのUTF-8(HFS+のファイル名など)をiconvで扱う場合、エンコーディングに「UTF-8-mac」を指定すると正しくエンコードされる。
今回はsubversionのエンコード部分をquick hackして何とか文字化けは解決した。

解決方法はソースコードを医ファイル書き換えるだけでできる。
Sunversion 1.4.5用のパッチ

--- subversion-1.4.5/subversion/libsvn_subr/utf.c_org	2007-12-30 21:14:54.000000000 +0900
+++ subversion-1.4.5/subversion/libsvn_subr/utf.c	2007-12-30 21:19:52.000000000 +0900
@@ -374,7 +374,7 @@
 get_ntou_xlate_handle_node(xlate_handle_node_t **ret, apr_pool_t *pool)
 {
   return get_xlate_handle_node(ret, SVN_APR_UTF8_CHARSET,
-                               SVN_APR_LOCALE_CHARSET,
+                               "UTF-8-mac",
                                SVN_UTF_NTOU_XLATE_HANDLE, pool);
 }
 
@@ -387,7 +387,7 @@
 static svn_error_t *
 get_uton_xlate_handle_node(xlate_handle_node_t **ret, apr_pool_t *pool)
 {
-  return get_xlate_handle_node(ret, SVN_APR_LOCALE_CHARSET,
+  return get_xlate_handle_node(ret, "UTF-8-mac",
                                SVN_APR_UTF8_CHARSET,
                                SVN_UTF_UTON_XLATE_HANDLE, pool);
 }