Well yes, look at this in your Update DAO:
new String(base64.decode(notesByte))
That's using the platform default encoding to convert the base64-decoded byte array into a string. The base64-decoded byte array is actually text encoded in GB2312 - not in the platform default encoding.
To convert it properly, you need to specify the same encoding everywhere:
new String(base64.decode(notesByte), "GB2312")