﻿# 設定 Subversion 存取權限時若有中文名稱需注意文件編碼

安裝 Subversion 到 Windows 平台可參考[這篇文章](/post/2008/07/15/How-to-install-Apache-22-OpenSSL-Subversion-15-in-Windows-environment)，但是在設定 [Subversion](https://subversion.apache.org/) 存取權限時卻需要注意關於**中文目錄名稱**的問題，我最近在設定 [Subversion](https://subversion.apache.org/) 存取權限時就遇到一個用中文命名的目錄怎樣都無法設定成功，所有被賦予這個目錄權限的人都無法存取，永遠都會回應 403 Forbidden 的錯誤訊息（如下）：

```
Server sent unexpected return value (403 Forbidden) in response to OPTIONS 
request for 'https://example.com/repos/project1/trunk'
```

我也去查詢 Apache 的 error log 發現這樣的訊息：

```
Access denied: 'username' GET project1:/trunk/\xe4\xb8\xad\xe6\x96\x87\xe7\x9b\xae\xe9\x8c\x84
```

我再去看 authz.ini 設定：

```
[project1:/trunk/中文目錄]
@dev-team=rw
username=rw
```

然後我再試著將中文改成 UrlEncode 與 Hex 的格式，卻還是都不行：

```
[project1:/trunk/中文目錄]
@dev-team=rw
username=rw
[project1:/trunk/\xe4\xb8\xad\xe6\x96\x87\xe7\x9b\xae\xe9\x8c\x84]
@dev-team=rw
username=rw
[project1:/trunk/%e4%b8%ad%e6%96%87%e7%9b%ae%e9%8c%84]
@dev-team=rw
username=rw
```

分析至此，我直覺的認為應該是 Unicode 的問題了，然後我就將此檔改成 UTF-8 ( 含 BOM 字元 )，改完後卻更慘，從 Apache error log 中查到 "Section header expected" 的錯誤：

```
Failed to load the AuthzSVNAccessFile: D:\\SVNRepository\\authz.ini:1: Section header expected
Access denied: 'username' GET project1:/trunk
```

又試了一會兒原本要放棄了，但多堅持個 20 分鐘終於被我試出來，原來只要將檔案格式改成 UTF-8 without BOM 即可，如果你用 [Notepad++](http://notepad-plus.sourceforge.net/) 可以參考以下圖示修改 authz.ini 檔案的編碼：

![Notepad++: 編譯成 UTF-8（檔首無 BOM）](https://stwillblogassets.blob.core.windows.net/files/images/external/stwillblogassets.blob.core.windows.net/7c4293ee42f21a82238a-image_3.png)

改完存檔之後就一切正常了，以後可以放心的在 Subversion 中使用中文命名了。
