I think I fixed a bug: the `case-fold-string=' defined is incorrect. It can't deal with the entries of different keys but same hash value. Meanwhile the hash value conflict for Chinese string seems to be quite large.
Here is a test case. In this case, two keys (Chinese string) has same hash value. You'll find all the `puthash' put values into same bucket.
(let ((a "宋兵甲") (b "宋兵乙") (hash (make-hash-table :test 'case-fold))) (puthash a "foo" hash) (puthash a "bar" hash) (puthash b "hi" hash) (message (format "%s=>%s" a (gethash a hash))) (message (format "%s=>%s" b (gethash b hash))) nil)