Well, it depends on what "all characters" are, but generally you should be able to just loop over a range of code points or character values, casting with chr
.
For example, if you want all printable ASCII characters:
text_string = ''.join([chr(i) for i in range(32, 127)])
bpy.ops.font.text_insert(text=text_string)
# [SPACE]!"#$%&\'()*+,-./0123456789:;<=>[email protected][\]^_`abc...xyz{|}~
Here, I just used a list comprehension to go from ASCII 32 to ASCII 126, inclusive. You could use a different range to suit your needs.
You can't really "separate characters by languages" because it's not bijective. Which language does A
belong to? Practically every language that uses a Latin-variant alphabet. How about ü
? Spanish, German, to name two.
You could separate characters by their Unicode blocks, like Basic Latin (U+0000 to U+007F), Latin-1 Supplement (U+0080 to U+00FF, contains stuff like ¢, ©, §, õ, þ, etc.), etc.
For example, if you wanted two separate text objects:
blocks = { 'basic_latin' : (0x20, 0x7E), 'latin-1-supp': (0xA0, 0xFF) }
for k, v in blocks.items():
t = ''.join([chr(i) for i in range(v[0], v[1] + 1)])
bpy.ops.font.text_insert(text=t)
bpy.ops.object.text_add
to add another text object. $\endgroup$