UTF-8 string construction

previous implementation produces weird results for multi-bytes characters. new implementation can handle them correctly (only Chinese is tested here.)