Skip to content

setindex! incorrect for non-UTF-8 strings? #59

Closed

Description

@nalimilan

These two lines don't seem correct to me for non-UTF-8 AbstractString types:

resize!(buffer, l + sizeof(val))
unsafe_copyto!(pointer(buffer, l+1), pointer(val,1), sizeof(val))

Indeed this will copy the contents of the string even if it uses a different encoding from existing data.

Activity

  1. quinnj commented on May 7, 2019

    @quinnj
    Member

    what would you suggest though? is there a standard api for getting the encoding of a string? converting it to utf8? or maybe if it's not in the encoding of the rest of the array, we reject it?

  2. nalimilan commented on May 8, 2019

    @nalimilan
    MemberAuthor

    AFAIK there's no API to get the encoding of a string, but that would be a logical complement to codeunit/codeunits. BTW, there's no guaranty that you can call pointer on an AbstractString and get a pointer to the data: one would need to use codeunits anyway even if the encoding matched.

    Waiting for a better API, I guess the only solution is to have a fast method for String with StringArray{<:Union{Missing, String}}, and a slower method iterating over characters for other cases.

  3. quinnj commented on Oct 15, 2026

    @quinnj
    Member

    [comment generated via AI] Fixed on main by #102: setindex!, push! and insert! now store non-UTF-8 strings (e.g. WeakRefString{UInt16}) and pointerless AbstractStrings as UTF-8. Verified on main 8ebbbab with Julia 1.12; not yet in a release.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions