13 2 月

UTF-8 正體中文 (繁體) 的筆畫排序

好像很久以前, 就已經發現到, 中文的排序是有一些問題的, 但我就放著。直到昨天在處理某個頁面時, 我發現, glossary 之類的東西, 按照筆畫排序是很重要的, 所以就 Google 了一下。

一開始, 我以為是 postgresql locale 的問題, 找到了幾個 link, 但是都沒有下文, 而且重點是我一開始在 Ubuntu 裝 postgresql 的時候, 我沒有更改設定, 所以 zh_TW 並沒有進去。開了台新機器隨便測一測, 仍然沒有達到我想要的結果。

直到我赫然發現我整個方向都錯了。後來才發現, 字元編碼本身, UTF-8 並不是按照筆畫順序排的, 但 Big5 是, 所以可以把該欄位轉成 Big5 之後再用這個欄位排序。

以下可以找到很多 MySQL 的版本:

以下是 postgresql 的 sample code。一般來說, 原本的搜尋就是像下面這樣:

[code]]czo1MTA6XCINCmRiPSMgc2VsZWN0IGlkLCB0aXRsZSBmcm9tIGtiX2FydGljbGUgb3JkZXIgYnkgdGl0bGU7DQppZCB8IHRpdGxlDQp7WyYqJl19LS0tLS0rLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tDQoxNTggfCDkuIHnqK7lu7rnr4nnlKjlnLANCntbJiomXX04MCB8IOS4jeWLleeUouWlouS+iOeoheWPr+eUqOWFrOWRiuePvuWAvOS4puaJo+aIkOacrOWXjg0KNzggfCDkuI3li5XnlKLlpaLke1smKiZdfb6I56iF55qE6Kqy5b615pmC6bue54K65L2VDQo3OSB8IOS4jeWLleeUoueahOWlouS+iOeoheeoheeOh+eCuuS9lQ0KMTU3IHwg5Lh7WyYqJl19meeoruW7uuevieeUqOWcsA0KMTc5IHwg5Li75bu654mpDQoxNjEgfCDkuZnnqK7lt6Xmpa3nlKjlnLANCjE1NiB8IOS5meeoruW7untbJiomXX3nr4nnlKjlnLANCjIxNCB8IOS6i+aVheWxiw0KMzMgfCDkuqTlsYvms6jmhI/kuovpoIUNCjEyIHwg5Lqk5piT5a6J5YWo5qmf5Yi2e1smKiZdfQ0KMTE2IHwg5LuA6bq85piv5Y2A5q615YyW44CB5Y676K2Y5Yil5YyW5pa55byP5o+Q5L6b5p+l6KmiDQpcIjt7WyYqJl19[[/code]

從上面可以看到, 乙只有一劃, 但是他並沒有排在最前面。

[code]]czo2ODU6XCINCmRiPSMgc2VsZWN0IGlkLCB0aXRsZSBmcm9tIGtiX2FydGljbGUgb3JkZXIgYnkgY29udmVydF90byh0aXRsZSwgXCdCe1smKiZdfUlHNVwnKTsNCmlkIHwgdGl0bGUNCi0tLS0tKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KNDIgfCDje1smKiZdfYCM6Yq35ZSu5aWR57SE44CN5piv5oyH5YWs5aWR6YKE5piv56eB5aWRDQoxNjEgfCDkuZnnqK7lt6Xmpa3nlKjlnLANCjE1NiB8IOR7WyYqJl19uZnnqK7lu7rnr4nnlKjlnLANCjE1OCB8IOS4geeoruW7uuevieeUqOWcsA0KMzQgfCDlhaXkvY/liY3mupblgpnkuovlrpwNCjE3NXtbJiomXX0gfCDlnJ/lnLDmlLnoia/niakNCjE1MyB8IOWcn+WcsOS9v+eUqOWIhuWNgA0KMTUyIHwg5Zyf5Zyw5oyB5Lu9DQo5NCB8IOWcn+Wce1smKiZdfbDnm7jpl5wNCjQ0IHwg5Zyf5Zyw6YeN5YqD5b6M5LmL44CM5oyB5pyJ5pyf6ZaT44CN5aaC5L2V6KiI566XDQoxOTEgfCDlpKflhax7WyYqJl19DQoyMjAgfCDlpbPlhZLniYYNCjE5MiB8IOWwj+WFrA0KNzkgfCDkuI3li5XnlKLnmoTlpaLkvojnqIXnqIXnjofngrrkvZUNCjgwIHtbJiomXX18IOS4jeWLleeUouWlouS+iOeoheWPr+eUqOWFrOWRiuePvuWAvOS4puaJo+aIkOacrOWXjg0KNzggfCDkuI3li5XnlKLlpaLkvojne1smKiZdfaiF55qE6Kqy5b615pmC6bue54K65L2VDQoxMTYgfCDku4DpurzmmK/ljYDmrrXljJbjgIHljrvorZjliKXljJbmlrnlvI/mj5Dkvpt7WyYqJl195p+l6KmiDQpcIjt7WyYqJl19[[/code]

沒想到… 這年頭… BIG5 還有這個作用 orz, 不過在 django 裡頭就只能下 raw 不能直接用他的 ORM 啦!