(define (string->wchar src) (let* ((orig-size (+ (string-length src) 1)) (wchar-length (mbstowcs #f (location src) 0))) (if (< wchar-length 0) (abort (make-property-condition 'exn 'location 'string->wchar 'message "Invalid multibyte sequence has been encountered")) (let* ((dest-wchar-size (+ wchar-length 1)) (dest (make-blob (* dest-wchar-size wchar-size))) (converted (mbstowcs (location dest) (location src) dest-wchar-size))) dest)))) (define (wchar->string wstr) (let* ((dest (make-string (+ (blob-size wstr) 1))) (converted (wcstombs (location dest) (location wstr) (string-length dest)))) (string-take dest converted)))